2017-08-24 67 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')在其他情况下。 –

相关问题