在点击

时间:2017-08-24 12:11:29

标签: android android-recyclerview

我有一个带有播放列表项目的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查看截图。

Click on Item 1 and show Image here

Click on Item 2 and show Image here

1 个答案:

答案 0 :(得分:0)

不要调用changeGif方法,在onBindViewHolder中编写此代码

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

并在OnclickListener中写下:

nowPlay = position;
notifyDatasetChanged();