2017-08-24 82 views
1

我的RecycleView中有一個播放列表項。現在我需要當用戶點擊一個項目,一個圖像顯示在點擊項目和隱藏所有其他項目。點擊查看RecycleView的Viewholder項目裏面的圖片

RecycleView項目佈局是

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:layout_marginBottom="1dp" 
       android:background="#FFFFFF"> 

    <TextView 
     android:id="@+id/itemName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/text_margin" 
     android:layout_alignParentLeft="true" 
     android:textAppearance="?attr/textAppearanceListItem"/> 

    <TextView 
     android:id="@+id/itemDetail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_margin="@dimen/text_margin" 
     android:textAppearance="?attr/textAppearanceListItem"/> 

    <pl.droidsonroids.gif.GifImageView 
     android:id="@+id/itemGif" 
     android:layout_width="60dp" 
     android:layout_height="30dp" 
     android:visibility="invisible" 
     android:src="@drawable/sound_bar" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:background="@android:color/white" 
     /> 
</RelativeLayout> 

這是我的代碼。此代碼正常工作與項目是可見的屏幕上。但是當項目在屏幕上不可見時,它會給出空點例外

viewHolder.itemGif.setVisibility(View.VISIBLE);

公共無效changeGif(INT nowPlay) {

MyItemRecyclerViewAdapter.ViewHolder viewHolder; 


    for (int i=0; i<recyclerView.getAdapter().getItemCount()-1;i++){ 
     if(i==nowPlay){ 

      viewHolder = (MyItemRecyclerViewAdapter.ViewHolder) recyclerView.findViewHolderForLayoutPosition(i); 
      viewHolder.itemGif.setVisibility(View.VISIBLE); 


     }else 
     { 

      viewHolder = (MyItemRecyclerViewAdapter.ViewHolder) recyclerView.findViewHolderForLayoutPosition(i); 
      viewHolder.itemGif.setVisibility(View.INVISIBLE); 

     } 
    } 


} 

PLZ見截圖。

Click on Item 1 and show Image here

Click on Item 2 and show Image here

回答

0

不要叫changeGif方法,onBindViewHolder

編寫代碼
if(i==nowPlay){ 
     viewHolder.itemGif.setVisibility(View.VISIBLE); 
    }else { 
     viewHolder.itemGif.setVisibility(View.INVISIBLE); 
    } 

和OnclickListener這樣寫:

nowPlay = position; 
notifyDatasetChanged(); 
+0

感謝@Divy快速響應...它解決了我的問題。但是onBindViewHolder這個代碼給出了意想不到的結果....'if(holder.mItem.getItemDate()。equalsIgnoreCase(「 - 」)){ holder.itemDetail.setTextSize(TypedValue.COMPLEX_UNIT_SP,21); holder.itemDetail.setTextColor(Color.BLUE); holder.mView.setEnabled(false); }'**它也改變不符合條件的另一個位置的顏色和文本大小......爲什麼......? Plz幫助** –

+0

不要從持有者那裏獲取任何數據,持有者僅用於視圖,而不是'holder.mItem'使用'mItem.getPosition(position).getItemDate()。equalsIgnoreCase(「 - 」)'並重置您的更改('textSize'和'textColor')在其他情況下。 –

相關問題