簡體   English   中英

在 Android Studio 的 RecyclerView 中單擊按鈕時更改按鈕的顏色

[英]Change color of button on clicking it in RecyclerView in Android Studio

我在 RecyclerViews 中有一些按鈕,它們應該在點擊時改變顏色,比如從紅色變為綠色,從綠色變為紅色。 創建了適配器和不同的按鈕。xml 因為它工作正常但無法理解將顏色從紅色更改為綠色以及將綠色更改為紅色。

holder.seat3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.seat3.setBackgroundColor(Color.parseColor("#ff0000"));
            }
        });
    }

我想在這里比較顏色,例如:如果顏色是紅色,則更改為綠色,如果是綠色,則更改為紅色

我認為您正在嘗試維護數據的 state。 考慮以下代碼:

public class CustomAdapter extends
            RecyclerView.Adapter<CustomAdapter.ViewHolder> {

    List<MyData> myDataList;
    Context context;

    public CustomAdapter(Context context, List<MyData> myDataList) {
        this.myDataList = myDataList;
        this.context = context;
    }

    @Override
    public CustomAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.button_lst, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull CustomAdapter.ViewHolder holder, int position) {

        MyData currentData = myDataList.get(position);
        
        holder.seat.setOnClickListener(v -> holder.toggleColor(currentData));

        holder.seat1.setOnClickListener(v -> holder.toggleColor(currentData));

        holder.seat2.setOnClickListener(v -> holder.toggleColor(currentData));

        holder.seat3.setOnClickListener(v -> holder.toggleColor(currentData));
    }

    @Override
    public int getItemCount() {
        return myDataList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        Button seat, seat1, seat2, seat3;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            seat = itemView.findViewById(R.id.button);
            seat1 = itemView.findViewById(R.id.button1);
            seat2 = itemView.findViewById(R.id.button2);
            seat3 = itemView.findViewById(R.id.button3);

        }

        private void toggleColor(MyData data) {
            if (data.state == MyData.STATE_RED)
                data.state = MyData.STATE_GREEN;
            else
                data.state = MyData.STATE_RED;

            switch (data.state) {
                case MyData.STATE_RED:
                    seat.setBackgroundColor(Color.parseColor("ff0000"));
                    seat1.setBackgroundColor(Color.parseColor("ff0000"));
                    seat2.setBackgroundColor(Color.parseColor("ff0000"));
                    seat3.setBackgroundColor(Color.parseColor("ff0000"));
                    break;
                case MyData.STATE_GREEN:
                    seat.setBackgroundColor(Color.parseColor("00ff00"));
                    seat1.setBackgroundColor(Color.parseColor("00ff00"));
                    seat2.setBackgroundColor(Color.parseColor("00ff00"));
                    seat3.setBackgroundColor(Color.parseColor("00ff00"));
                    break;
                default:
                    Log.e("ERROR", "toggleColor: invalid operation");
                    break;
            }
        }
    }

    public class MyData {
        private static final int STATE_INITIAL = 0;
        private static final int STATE_RED = 1;
        private static final int STATE_GREEN = 2;

        public String data;
        public int state;
    }
}

MainMethod.java

String[] Seats={"a","b","c","d","e","f","g","h","i","j","k","l","m"};

            List<MyData> myDataList = new ArrayList<>();
            
            for(String it : Seats){
                myDataList.add(new MyData(it, MyData.STATE_INITIAL));
            }

            CustomAdapter adapter = new CustomAdapter(this, myDataList);

PS:在單獨的文件中聲明 class MyData

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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