RecyclerView 单选和多选中背景变化

adapter 代码,主要是回调解决:



import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.HashMap;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import kadacom.com.pad.R;
import kadacom.com.pad.ui.bean.AppGrid;


public class PreFeedActivityAdapter extends RecyclerView.Adapter<ViewHolder> {

    public static HashMap<Integer, Boolean> isSelected;
    //数据集
    public List<AppGrid> mdatas;
    public Context context;
    private OnItemClickListener mOnItemClickListener;
    private int selected = -1;

    public PreFeedActivityAdapter(Context context, List<AppGrid> datas) {
        super();
        this.mdatas = datas;
        this.context = context;
        init();
    }

 //   public void setSelection(int position) {
//        this.selected = position;
//        notifyDataSetChanged();
//    }

    // 初始化 设置所有item都为未选择
    public void init() {
        isSelected = new HashMap<Integer, Boolean>();
        for (int i = 0; i < mdatas.size(); i++) {
            isSelected.put(i, false);
        }
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_intent_activity, parent, false);
        return new VideoViewHolder(view);


    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        if (isSelected.get(position)) {
            ((VideoViewHolder) holder).frameLayoutBack.setBackgroundColor(context.getResources().getColor(R.color.main_cycle_6));

        } else {
            ((VideoViewHolder) holder).frameLayoutBack.setBackgroundColor(context.getResources().getColor(R.color.white));
        }

        if (mOnItemClickListener != null) {
            ((VideoViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    mOnItemClickListener.onItemClick(((VideoViewHolder) holder).itemView, position);
                }
            });
            ((VideoViewHolder) holder).itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    mOnItemClickListener.onItemLongClick(((VideoViewHolder) holder).itemView, position);
                    return false;
                }
            });
        }


    }

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

    public interface OnItemClickListener {
        void onItemClick(View view, int positon);

        void onItemLongClick(View view, int positon);
    }

    public class VideoViewHolder extends ViewHolder {
        //        @BindView(R.id.gridicon)
//        ImageView imageView;
        @BindView(R.id.gridname)
        TextView gridName;

        @BindView(R.id.allbackgroud)
        LinearLayout frameLayoutBack;


        public VideoViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }

}

 private List<AppGrid> selectedData;

activity 实例代码

LinearLayoutManager layoutManager1 = new LinearLayoutManager(preFeedActivity.this);
        recyclerViewPre.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        recyclerViewPre.setLayoutManager(layoutManager1);
        recyclerViewPre.setHasFixedSize(true);
        DBManager dbManager = DBManager.getInstance(this);
        List<AppGrid> appGrids = dbManager.queryAppGridList();
        datas = new ArrayList<>();
        selectedData = new ArrayList<>();
        datas = appGrids;

        preFeedActivityAdapter = new PreFeedActivityAdapter(preFeedActivity.this, datas);
        recyclerViewPre.setAdapter(preFeedActivityAdapter);
        preFeedActivityAdapter.setOnItemClickListener(new PreFeedActivityAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, final int position) {
                if (!preFeedActivityAdapter.isSelected.get(position)) {
                    preFeedActivityAdapter.isSelected.put(position, true); // 修改map的值保存状态
                    preFeedActivityAdapter.notifyItemChanged(position);
                    selectedData.add(datas.get(position));
                } else {
                    preFeedActivityAdapter.isSelected.put(position, false); // 修改map的值保存状态
                    preFeedActivityAdapter.notifyItemChanged(position);
                    selectedData.remove(datas.get(position));
                }


//                preFeedActivityAdapter.setSelection(positon);
//                if ("REPARE_FEED".equals(datas.get(positon).getTarget())) {
//                    ARouter.getInstance().build("/kedacom/preFeedActivity").navigation();
//                } else {
//                    ARouter.getInstance().build("/kedacom/BarCodeTestActivity").withString("girl", "hello").navigation();
//                }
            }

猜你喜欢

转载自blog.csdn.net/u012922981/article/details/81703715
今日推荐