【发布时间】:2016-09-20 08:21:12
【问题描述】:
我有一个包含 20 个项目的回收站视图。 recyclerview 保存图像的缩略图。当一个项目被点击时,图像会在 viewpager 中可见。
当滑动viewpager时,我会在viewpager中获取当前项目的位置,然后在recyclerview中获取该位置的视图并将其更改为背景即,将带有缩略图的视图设置为选中
viewPager.addOnPageChangeListener(this);
@Override
public void onPageSelected(int position) {
recylerViewAdapter.changesBackground(position);
}
recyclerview 适配器changeBackgroundItem()
public void changesBackground(int position) {
View v = recyclerView.getChildAt(position);
if(v != null){
v.setSelected(true);
}
}
recyclerview 行/项目背景资源
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Color when the row is selected -->
<item android:state_selected="true">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/md_red_A700" android:width="3dp"/>
<corners android:radius="1dp"/>
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp"/>
</shape>
</item>
<item android:state_selected="false">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/md_black_1000" android:width="2dp"/>
<corners android:radius="1dp"/>
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp"/>
</shape>
</item>
</selector>
问题在于,不是只选择了一项,而是选择了不止一项。例如,当我将位置 1 的项目背景更改为红色时,位置 8,10 e.tc 的项目也会被选中。
这是由物品视图回收造成的吗?
如何避免其他项目被选中?
【问题讨论】:
-
如果您选择位置 1 的项目,其他随机项目也会改变背景颜色?
-
@Tony 我不会改变他们的背景。你是在建议我改变他们的背景吗?
-
@Tony 即使我这样做也无法正常工作
-
尝试将
onBindViewHolder中的position更改为viewHolder.getAdapterPosition(),以便在回收站视图中获得实际位置。 -
@harneev 我也试过了。但它产生了与上面相同的结果。
标签: android android-viewpager android-recyclerview