簡體   English   中英

Recyclerview按位置更改項目顏色在Android中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM