【发布时间】:2016-11-13 21:23:08
【问题描述】:
我正在使用 Recyclerview。我有一个复选框,并且可以成功更改项目背景中的背景颜色。这是我的适配器代码:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private List<VinLoadModel> moviesList;
private int activeColor=Color.parseColor("#c6ffc6");
private int passivecolor=Color.parseColor("#ffc6c6");
private onClickListener onClickListener;
private int selectedPosition;
public RecyclerViewAdapter.onClickListener getOnClickListener() {
return onClickListener;
}
public void setOnClickListener(RecyclerViewAdapter.onClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView vin, polygon;
public LinearLayout linearLayout;
public CheckBox checkBox;
public Button info;
public MyViewHolder(View view) {
super(view);
vin = (TextView) view.findViewById(R.id.vin_code);
polygon = (TextView) view.findViewById(R.id.polygon_name);
linearLayout = (LinearLayout) view.findViewById(R.id.mainLayout);
info=(Button)view.findViewById(R.id.info_click);
checkBox = (CheckBox) view.findViewById(R.id.checkBox);
}
}
public RecyclerViewAdapter(List<VinLoadModel> moviesList,int selectedPosition) {
this.moviesList = moviesList;
this.selectedPosition=selectedPosition;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.vin_load_item_adapter, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
VinLoadModel movie = moviesList.get(position);
holder.vin.setText(movie.getVin());
holder.info.setText("i".toLowerCase());
holder.polygon.setText(movie.getPolygon());
if(selectedPosition==position)
holder.linearLayout.setBackgroundColor(activeColor);
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
{
moviesList.get(position).setColorChanged(true);
holder.linearLayout.setBackgroundColor(activeColor);
}
else
{
moviesList.get(position).setColorChanged(false);
holder.linearLayout.setBackgroundColor(passivecolor);
}
}
});
holder.info.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(onClickListener!=null)
onClickListener.onClick(position);
}
});
}
@Override
public int getItemCount() {
return moviesList.size();
}
public interface onClickListener
{
void onClick(int position);
}
现在我想通过位置更改项目背景颜色。我编写了 addOnItemTouchListener 方法,但我有两个问题。 当我使用这种方法时,复选框监听器不起作用。是否可以同时使用这两种方法? 第二个问题。我可以更改例如第一个元素的背景颜色,但是当我单击第二个元素时,第一个元素的背景颜色是默认的(白色)
customListview.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), customListview, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, int position) {
vinLoadAdapter = new RecyclerViewAdapter(vinLoadModels,position);
customListview.setAdapter(vinLoadAdapter);
}
@Override
public void onLongClick(View view, int position) {
}
}));
我想,如果我改变了第一个背景颜色然后点击了第二个项目,第一个背景颜色也改变了(不是默认的白色) 我怎样才能解决我的问题? 谢谢大家
【问题讨论】:
标签: android listview android-recyclerview baseadapter