[英]single choice selection in RecyclerView
我试图得到如果一行被点击的背景颜色的行变为蓝色和之前选择的行背景颜色变为透明我怎么能实现这一点
这是我的回收器视图适配器
package kva.recyclerview;
import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
public class adapter extends RecyclerView.Adapter<adapter.MyViewHolder> {
Context context;
LayoutInflater inflater;
ArrayList<String> arrayList;
public adapter(Context context, ArrayList<String> arrayList) {
this.context = context;
this.arrayList = arrayList;
inflater = LayoutInflater.from(context);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.lit_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tvphone.setText(arrayList.get(position));
holder.tvemail.setText(arrayList.get(position));
holder.tvname.setText(arrayList.get(position));
}
@Override
public int getItemCount() {
return arrayList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvname;
TextView tvemail;
TextView tvphone;
public MyViewHolder(View itemView) {
super(itemView);
tvemail = (TextView) itemView.findViewById(R.id.emailtv);
tvname = (TextView) itemView.findViewById(R.id.nametv);
tvphone = (TextView) itemView.findViewById(R.id.phonetv);
}
}
}
我的主动
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
adapter adapter;
View oldView=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> arrayList=new ArrayList<String>();
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
recyclerView=(RecyclerView)findViewById(R.id.recView);
adapter=new adapter(this,arrayList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(this, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {
view.setBackgroundColor(Color.BLUE);
}
@Override public void onLongItemClick(View view, int position) {
// do whatever
}
})
);
}
}
最好使用模式类来表示要加载到回收器视图中的数据。 例,
public class DataModel {
private String name;
private int type;
public DataModel(String name, int type) {
this.name = name;
this.type = type;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
使用此类模型类来加载数据。 你在bindViewHolder中可以做一个检查说,
if (arrayList.get(position).getType() == 1)
holder.tv_simple_name.setTextColor(mContext.getResources().getColor(R.color.black));
else if (arrayList.get(position).getType() == 2)
holder.tv_simple_name.setTextColor(mContext.getResources().getColor(R.color.blue));
else if (arrayList.get(position).getType() == 3)
holder.tv_simple_name.setTextColor(mContext.getResources().getColor(R.color.transparent));
将此行添加到您的recyclerview项目onClick
for (int i = 0; i < arrayList.size(); i++) {
if (arrayList.get(i).getType() == 2)
arrayList.get(i).setType(3);
else if (itemsList.get(i).getType() == 3)
arrayList.get(i).setType(1);
}
arrayList.get(position).setType(2);
notifyDataSetChanged();
在向模型类添加项目时,将所有项目的类型初始值设置为1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.