[英]Recyclerview change item color by position In Android
我正在使用Recyclerview.I有一個復選框,並且成功地可以在我的項目背景中更改背景顏色。這是我的適配器代碼:
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);
}
現在我想通過Position.I編寫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) {
}
}));
我想,如果我改變第一個背景顏色,然后點擊第二個項目,第一個背景顏色也改變了(不是默認白色)我怎么能解決我的問題? 感謝大家
你需要使用調色板
在listview適配器中使用它async
Palette.from(bitmap).maximumColorCount(numberOfColors).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Get the "vibrant" color swatch based on the bitmap
Palette.Swatch vibrant = palette.getVibrantSwatch();
if (vibrant != null) {
// Set the background color of a layout based on the vibrant color
containerView.setBackgroundColor(vibrant.getRgb());
// Update the title TextView with the proper text color
titleView.setTextColor(vibrant.getTitleTextColor());
}
}
});
這段代碼將生成調色板顏色異步,您可以使用調色板在適配器Dyanamic顏色上使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.