-3

ошибки на: обновленныйне удается разрешить метод findViewByID (интермедиат) Фрагмент Java

Пытались использовать GetView.findViewById ошибку не удается разрешить методу GetView пытался использовать только findViewById ошибку не удается устранить findViewById(int)

package com.example.user.myapplication.Tabs; 
 

 
import android.animation.Animator; 
 
import android.animation.ValueAnimator; 
 
import android.os.Bundle; 
 
import android.support.annotation.Nullable; 
 
import android.support.v4.app.Fragment; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.view.ViewTreeObserver; 
 
import android.widget.LinearLayout; 
 

 
import com.example.user.myapplication.R; 
 

 
public class Hotel extends Fragment { 
 

 
    LinearLayout mLinearLayout; 
 
    LinearLayout mLinearLayoutHeader; 
 
    ValueAnimator mAnimator; 
 

 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
 
     View v =inflater.inflate(R.layout.hotel_frag,container,false); 
 
     return v; 
 

 
     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; 
 
    } 
 

 

 
    private void expand() { 
 
     //set Visible 
 
     mLinearLayout.setVisibility(View.VISIBLE); 
 

 
\t \t /* Remove and used in preDrawListener 
 
\t \t final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
 
\t \t final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
 
\t \t mLinearLayout.measure(widthSpec, heightSpec); 
 

 
\t \t mAnimator = slideAnimator(0, mLinearLayout.getMeasuredHeight()); 
 
\t \t */ 
 

 
     mAnimator.start(); 
 
    } 
 

 
    private void collapse() { 
 
     int finalHeight = mLinearLayout.getHeight(); 
 

 
     ValueAnimator mAnimator = slideAnimator(finalHeight, 0); 
 

 
     mAnimator.addListener(new Animator.AnimatorListener() { 
 
      @Override 
 
      public void onAnimationEnd(Animator animator) { 
 
       //Height=0, but it set visibility to GONE 
 
       mLinearLayout.setVisibility(View.GONE); 
 
      } 
 

 
      @Override 
 
      public void onAnimationStart(Animator animator) { 
 
      } 
 

 
      @Override 
 
      public void onAnimationCancel(Animator animator) { 
 
      } 
 

 
      @Override 
 
      public void onAnimationRepeat(Animator animator) { 
 
      } 
 
     }); 
 
     mAnimator.start(); 
 

 
    } 
 

 

 
    private ValueAnimator slideAnimator(int start, int end) { 
 

 
     ValueAnimator animator = ValueAnimator.ofInt(start, end); 
 

 

 
     animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
 
      @Override 
 
      public void onAnimationUpdate(ValueAnimator valueAnimator) { 
 
       //Update Height 
 
       int value = (Integer) valueAnimator.getAnimatedValue(); 
 

 
       ViewGroup.LayoutParams layoutParams = mLinearLayout.getLayoutParams(); 
 
       layoutParams.height = value; 
 
       mLinearLayout.setLayoutParams(layoutParams); 
 
      } 
 
     }); 
 
     return animator; 
 
    } 
 
}

+0

'findViewById' - это не метод класса' Fragment', который использует объект 'View' для доступа к методу' findViewById'. как в 'mLinearLayoutHeader = (LinearLayout) findViewById (R.id.header); 'line use' mLinearLayoutHeader = (LinearLayou) v .findViewById (R.id.header); ' –

+0

Итак, какой метод я должен использовать? Как использовать объект View для доступа к findview – GiveChance

+0

Использовать 'v', который u возвращается из метода' onCreateView' –

ответ

2

Попробуйте это

mLinearLayout = (LinearLayout) v.findViewById(R.id.expandable); 

и «возвращение v» должен быть последней строкой в ​​вашем методе onCreateView

метод Ur должен выглядеть следующим образом

@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; 
} 
+0

Пробовал метод Не работает также «Недостижимое заявление на моем mlinearLayout = (LinearLayout) v.findViewById (R.id.expandable); – GiveChance

+0

удалить обратный вызов v во второй строке .. я обновил ответ – vishnus

+0

Большое спасибо. – GiveChance

3

Пожалуйста дайте заявление возвращенного в конце OnCreate методы.

@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; 
} 
+0

спасибо, мой друг, ты только что спас мне жизнь ... этот ответ должен быть отмечен как лучший ответ ...: D – Ayoub

Смежные вопросы