无法解析方法findViewByID(int)片段java
错误:已更新 试图使用无法解析方法findViewByID(int)片段java,java,android,android-fragments,android-activity,android-studio,Java,Android,Android Fragments,Android Activity,Android Studio,错误:已更新 试图使用GetView。findViewById错误无法解析方法GetView 尝试仅使用findViewById错误无法解决findViewById(int) package com.example.user.myapplication.Tabs; 导入android.animation.Animator; 导入android.animation.ValueAnimator; 导入android.os.Bundle; 导入android.support.annotation.N
GetView。findViewById
错误无法解析方法GetView
尝试仅使用findViewById
错误无法解决findViewById(int)
package com.example.user.myapplication.Tabs;
导入android.animation.Animator;
导入android.animation.ValueAnimator;
导入android.os.Bundle;
导入android.support.annotation.Nullable;
导入android.support.v4.app.Fragment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.view.ViewTreeObserver;
导入android.widget.LinearLayout;
导入com.example.user.myapplication.R;
公共级酒店{
线性布局;
线性布局,近布局引导器;
评估师、动画师、模拟师;
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图v=充气机。充气(右布局。酒店框架,集装箱,假);
返回v;
mLinearLayout=(LinearLayout)v.findviewbyd(R.id.expandable);
//mLinearLayout.setVisibility(View.GONE);
mlinearlayouthheader=(LinearLayout)v.findViewById(R.id.header);
//AddOnPreDrawListener
mLinearLayout.getViewTreeObserver().addOnPreDrawListener(
新建ViewTreeObserver.OnPreDrawListener(){
@凌驾
公共布尔onPreDraw(){
mLinearLayout.getViewTreeObserver().removeOnPreDrawListener(此);
mLinearLayout.setVisibility(View.GONE);
final int widthSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.unspected);
final int heightSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.unspected);
MLINEARELAYOUT.测量(宽度规格、高度规格);
mAnimator=slideAnimator(0,mLinearLayout.getMeasuredHeight());
返回true;
}
});
mlinearlayouthreader.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
if(mLinearLayout.getVisibility()==View.GONE){
展开();
}否则{
塌陷();
}
}
});
返回v;
}
私有void expand(){
//可见
mLinearLayout.setVisibility(View.VISIBLE);
/*删除并在preDrawListener中使用
final int widthSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.unspected);
final int heightSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.unspected);
MLINEARELAYOUT.测量(宽度规格、高度规格);
mAnimator=slideAnimator(0,mLinearLayout.getMeasuredHeight());
*/
mAnimator.start();
}
私有空间崩溃(){
int finalHeight=mLinearLayout.getHeight();
值Animator mAnimator=slideAnimator(最终高度,0);
mAnimator.addListener(新的Animator.AnimatorListener(){
@凌驾
AnimationEnd上的公共无效(Animator Animator){
//高度=0,但它将可见性设置为“消失”
mLinearLayout.setVisibility(View.GONE);
}
@凌驾
AnimationStart上的公共无效(Animator Animator){
}
@凌驾
AnimationCancel上的公共无效(Animator Animator){
}
@凌驾
AnimationRepeat上的公共无效(Animator Animator){
}
});
mAnimator.start();
}
私有值Animator slideAnimator(int开始,int结束){
ValueAnimator animator=ValueAnimator.ofInt(开始、结束);
animator.addUpdateListener(新值animator.AnimatorUpdateListener(){
@凌驾
动画更新上的公共无效(ValueAnimator ValueAnimator){
//更新高度
int value=(整数)valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams LayoutParams=mLinearLayout.getLayoutParams();
layoutParams.height=值;
mLinearLayout.setLayoutParams(layoutParams);
}
});
返回动画师;
}
}
试试这个
mLinearLayout = (LinearLayout) v.findViewById(R.id.expandable);
“return v”应该是onCreateView方法中的最后一行
你的方法应该是这样的
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.hotel_frag,container,false);
mLinearLayout = (LinearLayout) v.findViewById(R.id.expandable);
//mLinearLayout.setVisibility(View.GONE);
mLinearLayoutHeader = (LinearLayout) v.findViewById(R.id.header);
//Add onPreDrawListener
mLinearLayout.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
mLinearLayout.getViewTreeObserver().removeOnPreDrawListener(this);
mLinearLayout.setVisibility(View.GONE);
final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
mLinearLayout.measure(widthSpec, heightSpec);
mAnimator = slideAnimator(0, mLinearLayout.getMeasuredHeight());
return true;
}
});
mLinearLayoutHeader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mLinearLayout.getVisibility()==View.GONE){
expand();
}else{
collapse();
}
}
});
return v;
}
请在oncreate方法的末尾给出return语句
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.hotel_frag,container,false);
----------------- your code -----------------
return v;
}
findViewById
不是Fragment
类的方法使用View
对象访问findViewById
方法。类似于mlinearlayouthreader=(LinearLayout)findViewById(R.id.header)代码>行使用mlinearlayou=(LinearLayou)v.findViewById(R.id.header)那么我应该使用什么方法呢?如何使用View object访问FindViewSEv
您从创建视图返回的方法似乎不起作用:/edit and update您的代码,我们将告诉您为什么它不起作用..尝试了该方法也不起作用“在我的mLinearLayout=(LinearLayout)v.findViewById(R.id.expandable)上的不可访问语句”;删除第二行的return v call..我已经更新了答案谢谢我的朋友你刚刚救了我的命..这个答案应该被标记为最佳答案