我有一个带有播放列表项目的RecycleView。现在我需要当用户点击一个项目,一个图像显示在Clicked项目内部和隐藏所有其他项目。
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);
public void 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查看截图。
答案 0 :(得分:0)
不要调用changeGif方法,在onBindViewHolder中编写此代码
if(i==nowPlay){
viewHolder.itemGif.setVisibility(View.VISIBLE);
}else {
viewHolder.itemGif.setVisibility(View.INVISIBLE);
}
并在OnclickListener中写下:
nowPlay = position;
notifyDatasetChanged();