点击RecyclerView条目互斥效果

259 阅读1分钟

思路:循环list数据源, 把每条数据里的flag设置false 点击的设置成true就可以了
增加flag标志:

public class Bean {
    public String title;
    public boolean flag;

    public Bean( String title, boolean flag) {
        this.title = title;
        this.flag = flag;
    }

}

adapter中

@Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
//        holder.button.setText(records.get(position).getTopic());
        Log.e("wy", "position: " + position);
        holder.button.setText(mDatas.get(position).title);

        if (mDatas.get(position).flag) {
            holder.ll.setBackground(mContext.getResources().getDrawable(R.drawable.autofitbutton_press));
            holder.button.setTextColor(mContext.getResources().getColor(R.color.auto_select));
        } else {
            holder.ll.setBackground(mContext.getResources().getDrawable(R.drawable.autofitbutton_normal));
            holder.button.setTextColor(mContext.getResources().getColor(R.color.auto_select_text_normal));
        }
        if (mOnItemClickLitener != null) {
            holder.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   int pos = holder.getLayoutPosition();
                   mOnItemClickLitener.onItemClick(holder.itemView, pos);
                    if (selectPos <= mDatas.size()) {
                        mDatas.get(selectPos).flag = false;
                        selectPos = position;
                    }
                    mDatas.get(position).flag = !mDatas.get(position).flag;
                    notifyDataSetChanged();


                }

            });

        }

    }

全代码

public class RecyclerViewActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private HomeAdapter homeAdapter;

    private TextView tvMore;

    List<TopicListBean.DataDTO.RecordsDTO> records;
    TopicListBean topicListBean;

    private ArrayList<Bean> mDatas;
    /**
     * 数据集合
     */
//    private ArrayList<Bean> imgs = new ArrayList<>();

    LinearLayoutManager linearLayoutManager;
    HorizontalScrollView horizontalScrollView;
    private TextView topicTv;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler_view);
        horizontalScrollView= (HorizontalScrollView) findViewById(R.id.hs);
        topicTv = (TextView) findViewById(R.id.topic_tv);

        mRecyclerView = (RecyclerView) findViewById(R.id.rv);
        tvMore = (TextView) findViewById(R.id.tv_more);

        mDatas = new ArrayList<>();

        for (int i = 'A'; i <= 'C'; i++) {
            mDatas.add(new Bean( "name" + i, false));
        }


        Log.e("wy", "mDatas.size(): "+mDatas.size() );
        if(mDatas.size()==0||mDatas==null){
            horizontalScrollView.setVisibility(View.GONE);
            topicTv.setVisibility(View.GONE);
        }else {
            horizontalScrollView.setVisibility(View.VISIBLE);
            topicTv.setVisibility(View.VISIBLE);
        }

//        if (mDatas.size() > 5) {
//            tvMore.setVisibility(View.VISIBLE);
//        } else {
//            tvMore.setVisibility(View.VISIBLE);
//        }

        linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
//        linearLayoutManager.setOrientation(linearLayoutManager.HORIZONTAL);
//        linearLayoutManager.scrollToPositionWithOffset(0, 0);
        mRecyclerView.setLayoutManager(linearLayoutManager);
//        homeAdapter = new HomeAdapter(RecyclerViewActivity.this, records);
        homeAdapter = new HomeAdapter(RecyclerViewActivity.this, mDatas);
        mRecyclerView.setAdapter(homeAdapter);

        homeAdapter.setOnItemClickLitener(new HomeAdapter.OnItemClickLitener() {
            @Override
            public void onItemClick(View view, int position) {
                Log.e("wy", "onItemClick: "+position );
            }
        });



//        RequestParams params = new RequestParams("http://10.10.2.65:8072/cr-app/topic/list");
//        params.addBodyParameter("currPage", 1);
//        params.addBodyParameter("pageSize", 2);
//
//        x.http().post(params, new Callback.CommonCallback<String>() {
//            @Override
//            public void onSuccess(String result) {
//                Log.e("wy","result: "+ result);
//                 topicListBean = JSON.parseObject(result, TopicListBean.class);
//                 records= topicListBean.getData().getRecords();
//                Log.e("wy","result: "+ topicListBean.getData().getRecords().toString());
//
//                if (records.size() > 5) {
//                    tvMore.setVisibility(View.VISIBLE);
//                } else {
//                    tvMore.setVisibility(View.GONE);
//                }
//
//
//                LinearLayoutManager linearLayoutManager = new LinearLayoutManager(RecyclerViewActivity.this);
//                linearLayoutManager.setOrientation(linearLayoutManager.HORIZONTAL);
//                mRecyclerView.setLayoutManager(linearLayoutManager);
//                homeAdapter = new HomeAdapter(RecyclerViewActivity.this, records);
//                mRecyclerView.setAdapter(homeAdapter);
//
//                homeAdapter.setOnItemClickLitener(new HomeAdapter.OnItemClickLitener() {
//
//                    @Override
//                    public void onItemClick(View view, int position) {
//                        Toast.makeText(RecyclerViewActivity.this, position + " click",
//                                Toast.LENGTH_SHORT).show();
//                    }
//
//
//                });
//
//            }
//
//            @Override
//            public void onError(Throwable ex, boolean isOnCallback) {
//                Log.e("wy","onError result: "+  ex.getMessage());
//            }
//
//            @Override
//            public void onCancelled(CancelledException cex) {
//                Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();
//            }
//
//            @Override
//            public void onFinished() {
//
//            }
//        });


    }
    }
package com.example.myapplication;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;


public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {
    ArrayList<Bean> mDatas;
    Context mContext;

    /**
     * 用于保存点击的item位置
     */
    private int selectPos = 0;

    public HomeAdapter(Context mContext, ArrayList<Bean> mDatas) {
        this.mContext = mContext;
        this.mDatas = mDatas;

    }

    public interface OnItemClickLitener {
        void onItemClick(View view, int position);

    }

    private OnItemClickLitener mOnItemClickLitener;

    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {
        this.mOnItemClickLitener = mOnItemClickLitener;
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                mContext).inflate(R.layout.item_home, parent,
                false));
        return holder;
    }


    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
//        holder.button.setText(records.get(position).getTopic());
        Log.e("wy", "position: " + position);
        holder.button.setText(mDatas.get(position).title);

        if (mDatas.get(position).flag) {
            holder.ll.setBackground(mContext.getResources().getDrawable(R.drawable.autofitbutton_press));
            holder.button.setTextColor(mContext.getResources().getColor(R.color.auto_select));
        } else {
            holder.ll.setBackground(mContext.getResources().getDrawable(R.drawable.autofitbutton_normal));
            holder.button.setTextColor(mContext.getResources().getColor(R.color.auto_select_text_normal));
        }
        if (mOnItemClickLitener != null) {
            holder.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   int pos = holder.getLayoutPosition();
                   mOnItemClickLitener.onItemClick(holder.itemView, pos);
                    if (selectPos <= mDatas.size()) {
                        mDatas.get(selectPos).flag = false;
                        selectPos = position;
                    }
                    mDatas.get(position).flag = !mDatas.get(position).flag;
                    notifyDataSetChanged();


                }

            });

        }

    }


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

    class MyViewHolder extends RecyclerView.ViewHolder {

        LinearLayout ll;
        Button button;
        TextView tv;


        public MyViewHolder(View view) {
            super(view);
            ll = (LinearLayout) view.findViewById(R.id.ll);
            button = (Button) view.findViewById(R.id.id_num);
            tv = (TextView) view.findViewById(R.id.tv);
        }
    }
}
package com.example.myapplication;

public class Bean {
    public String title;
    public boolean flag;

    public Bean( String title, boolean flag) {
        this.title = title;
        this.flag = flag;
    }

}