2016-10-25 20 views
0

我正在使用網格視圖,並且在每個網格單元格中顯示相機預覽,TextViewLinearLayout。我希望當我點擊LinearLayout它的能見度應該消失,只有TextView應該是可見的。它的工作正常,但有時我遇到問題。假設現在只有兩個單元格可見,當我點擊單元格1的LinearLayout時,它應該消失,但是單元格2的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; 
} 

OR

在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個位置)時,第二個單元格的motionLayout的可見性消失了。根據第1單元的motionLayout的邏輯可見性應該消失 –

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個位置)時,第二個單元格的motionLayout的可見性消失了。根據第一個單元的motionLayout的邏輯可見性應該去掉 –

+1

嘗試使用v.setVisibility(LinearLayout.GONE);而不是motionLayout.setVisibility(LinearLayout.GONE); – Aditi

+0

或通過viewHolder的幫助,將viewHolder設置爲motionLayout的標籤,並將set Visiblity設置爲可見或通過獲取標籤。見編輯的代碼 – Aditi

相關問題