gpt4 book ai didi

android - 单击时突出显示 RecyclerView 中的选定项目

转载 作者:行者123 更新时间:2023-11-29 23:40:05 25 4
gpt4 key购买 nike

我得到了一个 RecyclerView 并且我弄清楚了如何在项目被点击时突出显示项目并像他们告诉的那样 here .

但是这将突出显示该项目被点击后。我希望在普通的 ListView 中有类似的东西。因此,单击时应突出显示该项目。这就是我改用 OnTouchListener 的原因。

@Override
public boolean onTouch(View v, MotionEvent event) {
int adapterPosition = getAdapterPosition();
if (adapterPosition == RecyclerView.NO_POSITION) return false;

adapter.notifyItemChanged(adapter.getSelectedPos());
adapter.setSelectedPos(adapterPosition);
adapter.notifyItemChanged(adapter.getSelectedPos());

if(event.getAction() == MotionEvent.ACTION_UP){
clicks.onItemSelected(adapterPosition);
return true;
}

return false;
}

但我的问题是,我还想知道用户何时向上移动他的手指,以便在点击时我可以做我想做的事。但不幸的是,这是行不通的。我怎样才能做到这一点?

最佳答案

您提供的代码,我认为仅突出显示所选项目是不正确的方法。您的代码将多次通知不必要的项目。

这可以通过可绘制的选择器来完成。因为有 many answers 哪个指南,如何使用选择器背景。

但这就是问题所在

selectableItemBackground 仅适用于触摸,不适用于选择。所以这是一个技巧。

我们将在同一 View 上将前景设置为 ?selectableItemBackground 和自定义背景选择器。

我创建了一个满足您要求的示例。

  • 首先制作一个背景选择器,它在停用时设置透明色,在激活时设置颜色。

activated_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true">
<color android:color="@color/colorPrimary"/>
</item>
<item>
<color android:color="@android:color/transparent"/>
</item>
</selector>
  • 使用此选择器作为项目的背景。同时将前景设置为 ?selectableItemBackground

行.xml

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/activated_color_selector"
android:foreground="?selectableItemBackground">

// other views inside

</LinearLayout>
  • 您的模型类将包含选定的 bool 值。

模型.java

public class BaseModel extends BaseObservable {
private boolean selected;
// setter getter
}
  • 将模型选择的字段附加到 View 。单击时还会反转所选字段。

内部 RecyclerView 适配器

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
final BaseModel model = list.get(position);
holder.linearLayout.setActivated(model.isSelected());
holder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
model.setSelected(!model.isSelected());
notifyItemChanged(position);
}
});
}

全部完成!

关于android - 单击时突出显示 RecyclerView 中的选定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51949120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com