2016-10-25 5 views
0

Я использую вид сетки, и в каждой ячейке ячейки я показываю предварительный просмотр камеры, TextView и LinearLayout. Я хочу, чтобы, когда я нажимаю на LinearLayout, видимость должна исчезнуть, и только TextView должен быть виден. Он работает нормально, но когда-нибудь у меня проблема. Предположим, что только две ячейки видны сейчас, когда я нажал LinearLayout ячейки, которую он должен был убрать, но вместо этого LinearLayout сотовой ячейки исчез.Неправильное положение для элемента, щелкнутого в виде сетки

public View getView(int position, View convertView, ViewGroup parent) { 
     Log.d(LOG_TAG,"vikash: gridView Position position: "+position); 
     final CameraItem camera = getItem(position); 

     if(convertView == null) { 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = (LinearLayout)inflater.inflate(R.layout.camera_cell, null); 
     } 
     final int mlayoutPosition; 
     mlayoutPosition=position;  
     final LinearLayout motionLayout = (LinearLayout)convertView.findViewById(R.id.motion_details); 

      final TextView name = (TextView)convertView.findViewById(R.id.name); 
      motionLayout.setOnClickListener(new OnClickListener(){ 
       @Override 
       public void onClick(View v) { 
        camera.ignoreMotionFault(); 
        motionLayout.setVisibility(LinearLayout.GONE); 
        Log.d(LOG_TAG,"vikash: motionlayout visibility gone for position: "+mlayoutPosition); 
        name.setVisibility(TextView.VISIBLE); 
       } 
      }); 
      return convertView; 
} 

ответ

0

Не используйте mlayoutposition переменных внутри clicklistener использование position переменные и сделать в параметрах метода GetView position переменных окончательного:

public View getView(final int position, View convertView, ViewGroup parent) { 
    Log.d(LOG_TAG, "vikash: gridView Position position: " + position); 
    final CameraItem camera = getItem(position); 

    if (convertView == null) { 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = (LinearLayout) inflater.inflate(R.layout.camera_cell, null); 
    } 
    final int mlayoutPosition; 
    mlayoutPosition = position; 
    final LinearLayout motionLayout = (LinearLayout) convertView.findViewById(R.id.motion_details); 

    final TextView name = (TextView) convertView.findViewById(R.id.name); 
    motionLayout.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      camera.ignoreMotionFault(); 
      motionLayout.setVisibility(TextView.GONE); 
      Log.d(LOG_TAG, "vikash: motionlayout visibility gone for position: " + position); 
      name.setVisibility(TextView.VISIBLE); 
     } 
    }); 
    return convertView; 
} 

ИЛИ

Просто простая линия в методе onClickListener:

mlayoutPosition = position;

motionLayout.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mlayoutPosition = position; // get latest position 
      camera.ignoreMotionFault(); 
      motionLayout.setVisibility(TextView.GONE); 
      Log.d(LOG_TAG, "vikash: motionlayout visibility gone for position: " + position); 
      name.setVisibility(TextView.VISIBLE); 
     } 
    }); 
+0

mlayoutPosition не является проблемой. Я добавил, что для просмотра только журнала. Моя проблема в том, что когда я нажимаю motionLayout первой ячейки (0-я позиция в виде сетки) visibiliy motionLayout 2-й ячейки исчез. В соответствии с логикой visibiliy движенияLayout 1-й ячейки должны уйти –

0

попробуйте установить видимость LinearLayout.GONE вместо textView.Gone

+0

LinearLayout.GONE и TextView.GONE имеют то же значение, то есть 8. Так что это не проблема –

0

Попробуйте использовать ниже: -

public View getView(int position, View convertView, ViewGroup parent) { 
     Log.d(LOG_TAG,"vikash: gridView Position position: "+position); 
     CameraItem camera = getItem(position); 
     ViewHolder viewHolder=null; 
     if(convertView == null) { 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = (LinearLayout)inflater.inflate(R.layout.camera_cell, null); 
      viewHolder=new ViewHolder(); 
      viewHolder.motionLayout= (LinearLayout)convertView.findViewById(R.id.motion_details); 
      viewHolder.name = (TextView)convertView.findViewById(R.id.name); 
      convertView.setTag(viewHolder); 
     }else{ 
      viewHolder=(ViewHolder)convertView.getTag(); 
     } 
     // if you want to get position on click of that view set tag position to that view 
    viewHolder.motionLayout.setTag(viewHolder); 
      viewHolder.motionLayout.setOnClickListener(new OnClickListener(){ 
       @Override 
       public void onClick(View v) { 
        camera.ignoreMotionFault(); 
        ViewHolder view_holder=(ViewHolder)v.getTag(); 
        view_holder.motionLayout.setVisibility(LinearLayout.GONE); 
        view_holder.name.setVisibility(TextView.VISIBLE); 
       } 
      }); 
      return convertView; 
} 

public class ViewHolder{ 
LinearLayout motionLayout; 
TextView name; 
} 

Используйте ViewHolder и использовать предыдущие взгляды по тэгу и использования чтобы получить положение зрения

+0

Как я знаю, шаблон ViewHolder используется для плавной прокрутки. В моем случае прокрутка не проблема. Моя проблема в том, что когда я нажимаю motionLayout первой ячейки (0-я позиция в виде сетки) visibiliy motionLayout 2-й ячейки исчез. В соответствии с логикой visibiliy движенияLayout 1-й ячейки должны исчезнуть –

+1

Попробуйте использовать v.setVisibility (LinearLayout.GONE); вместо motionLayout.setVisibility (LinearLayout.GONE); – Aditi

+0

или с помощью viewHolder, установите viewHolder как тег motionLayout и установите set Visiblity, видимый или пройденный этим тегом. См. Измененный код – Aditi

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