android - 如何在 Swipe 上更改 RecyclerView 项目颜色?
问题描述
我试图让recyclerView
项目在滑动时改变颜色,所以它会被突出显示,因为在滑动时我打开一个AlertDialog
,所以这个人会识别出他正在改变哪一个项目。
但我的主要问题是,当我尝试通过使用更改背景颜色时
viewHolder.itemView.setBackgroundColor(Color.parseColor("#cc0000"));
什么都没有发生,这是我来自 builder 的完整代码recyclerView
public void buildTopRecyclerView(){
mRecyclerViewTOP = findViewById(R.id.listView);
mRecyclerViewTOP.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
exampleAdapter = new ExampleAdapter(itemCassas);
mRecyclerViewTOP.setLayoutManager(mLayoutManager);
mRecyclerViewTOP.setAdapter(exampleAdapter);
// onSwipe();
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
if (direction == ItemTouchHelper.RIGHT) {
customAllertDelete(position);
viewHolder.itemView.setBackgroundColor(Color.parseColor("#cc0000"));
exampleAdapter.notifyDataSetChanged();
}
if (direction == ItemTouchHelper.LEFT) {
customAllertQuantity(position);
}
}
}).attachToRecyclerView(mRecyclerViewTOP);
}
如果有用的话,这里也是适配器代码
public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {
private ArrayList<ItemCassa> mExampleList;
@NonNull
@Override
public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerlist_item,parent,false);
return new ExampleViewHolder(v);
}
ExampleAdapter(ArrayList<ItemCassa> exampleList){
mExampleList = exampleList;
}
@Override
public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
ItemCassa item = mExampleList.get(position);
holder.desc.setText(item.getBtnName());
holder.qta.setText(String.valueOf(item.getQuant()));
holder.imp.setText(String.valueOf((new DecimalFormat("#0.00").format(item.getPrice()))));
if(position % 2 == 0 ){
holder.itemView.setBackgroundColor(Color.parseColor("#C0C0C0"));
holder.desc.setBackgroundColor(Color.parseColor("#C0C0C0"));
holder.qta.setBackgroundColor(Color.parseColor("#C0C0C0"));
holder.imp.setBackgroundColor(Color.parseColor("#C0C0C0"));
}else if(position % 2 == 1){
holder.itemView.setBackgroundColor(Color.parseColor("#D3D3D3"));
holder.desc.setBackgroundColor(Color.parseColor("#D3D3D3"));
holder.qta.setBackgroundColor(Color.parseColor("#D3D3D3"));
holder.imp.setBackgroundColor(Color.parseColor("#D3D3D3"));
}
}
@Override
public int getItemCount() {
return mExampleList.size();
}
public static class ExampleViewHolder extends RecyclerView.ViewHolder {
public TextView desc;
public TextView qta;
public TextView imp;
ExampleViewHolder(View itemView) {
super(itemView);
desc = itemView.findViewById(R.id.Desc);
qta = itemView.findViewById(R.id.Qta);
imp = itemView.findViewById(R.id.Imp);
}
}
public void removeItem(int position) {
mExampleList.remove(position);
notifyItemRemoved(position);
}
}
这是“解释”我正在尝试做的事情的 gif,正如您在滑动时看到的那样,它打开了一个 AlertDialog 并返回所选项目,但现在我将为所选项目背景着色,直到用户做出选择在警报对话框中
解决方案
尝试像这样使用:
首先在您的 onSwiped 方法中调用适配器的方法并传递所需的参数。
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
int swipedPosition = viewHolder.getAdapterPosition();
YourAdapter adapter = (YourAdapter) rlCartList.getAdapter();
adapter.remove(swipedPosition); // I was removing items so you
can change the name of method as you like
}
现在在您的适配器中执行以下操作:
public void remove(int position) {
YourModel item = cartItems.get(position);
if (cartItems.contains(item)) {
ViewHolder.tvItemName.setBackgroundColor(mContext.getResources().getColor(R.color.grey));
notifyDataSetChanged();
}
}
另一件事是您需要将您的 textView 或您分配背景的视图设置为Static
. 我已经测试了这段代码,它在我的项目中运行良好,textView 的背景在滑动时发生了变化。
如果您需要进一步的帮助,请告诉我。还有一件事你也可以在适配器中使用你的警报对话框:)
推荐阅读
- sql - Oracle 触发器错误 - ORA-04080:触发器“TRIG”不存在
- android - Android 布局 2x3 静态均匀大小的图像网格
- file - 使用 nodejs 上传大量数据
- node.js - 将图像上传到 S3 存储桶时如何在 Multer Sharp S3 中制作分辨率动态值
- sql-server - 错误:Azure 上的 SQL Server 2014 上的“索引超出了数组的范围”,带有新的 SSMS?
- python-3.x - 在 Python 中集成 baselinker
- haskell - Haskell SBV 中的状态序列不满足约束
- flask - iis烧瓶蓝图404页面未找到
- python - 使用 tensorflow 时出现错误:int() 参数必须是字符串、类似字节的对象或数字,而不是“NoneType”
- vim - vim用制表符替换空格