Android Recycleview Item 点击选择事件以及选中后标记不同背景色滑动不出现错乱

实现recycleview使用基本流程,点击事件,长按事件,item选择后有特殊标记其余item恢复原状,滑动不出现错乱问题。伪代码如下:

 

Activity代码

public class VideoOnDemandActivity extends Activity {

    private RecyclerView mVieoRecycleview;
    private TitileBarView dateTimeView;
    private SuspectInfoModel suspectInfo;
    private VideoListAdapter videoListAdapter;
    private ArrayList<VideoListBean> mVideoList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_on_demand);
        suspectInfo = SuspectInfoStore.getInstance().suspectInfo;
        initView();

    }

    private void initView() {
        mVideoList = new ArrayList<>();
        mVieoRecycleview = findViewById(R.id.video_recycleview);
        mVieoRecycleview.setHasFixedSize(true);
        mVieoRecycleview.setLayoutManager(new LinearLayoutManager(this));
        dateTimeView = (TitileBarView) findViewById(R.id.dateTimeView);
        if (suspectInfo != null) {
            dateTimeView.setType("登陆用户:");
            dateTimeView.setUserName(suspectInfo.getXM());
            dateTimeView.setTitle("视频点播");

            videoListAdapter = new VideoListAdapter(this,mVideoList,"");
             mVieoRecycleview.setAdapter(videoListAdapter);

            videoListAdapter.setmOnItemClickListener(new VideoListAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position, ArrayList<VideoListBean> msg) {
                    Toast.makeText(VideoOnDemandActivity.this, "点击了"+position, Toast.LENGTH_SHORT).show();
                    Log.e("---电视节目---点击",position+"");
                }

                @Override
                public void onItemLongClick(View view, int position) {
                    Toast.makeText(VideoOnDemandActivity.this, "长恩了"+position, Toast.LENGTH_SHORT).show();
                    Log.e("---电视节目---长摁",position+"");
                }
            });
    }
}}

 

 

Bean代码:

public class VideoListBean {

    private String Id = "";
    private String Img = "";
    private String Name = "";
    private int imageId;
    private String selectTag = "";
    private int selectNum = 1;


    public VideoListBean(JSONObject item) {

        this.Id = item.optString("Id");
        this.Img = item.optString("Img");
        this.Name = item.optString("Name");
        this.imageId = item.optInt("imageId");
        this.selectTag = item.optString("selectTag");
        this.selectNum = item.optInt("selectNum");
    }

    public VideoListBean(String name, int imageId) {

       this.Name = name;
       this.imageId = imageId;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public String getImg() {
        return Img;
    }

    public void setImg(String img) {
        Img = img;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getSelectTag() {
        return selectTag;
    }

    public void setSelectTag(String selectTag) {
        this.selectTag = selectTag;
    }

    public int getSelectNum() {
        return selectNum;
    }

    public void setSelectNum(int selectNum) {
        this.selectNum = selectNum;
    }
}

Adapter代码:

public class VideoListAdapter extends RecyclerView.Adapter<VideoListViewHolder> {

    private LayoutInflater mInflater;
    private Context mContext;
    private ArrayList<VideoListBean> mDatas;

    private String mAdapterType;
    private int productnum = 1;
    private Account mAccount;
    //    private VolleyHelper mHttpHelper;
    double res;
    int ListSize = 0;
    private String itmeViewTag;
    int choosepos = 0;

    List<VideoListBean> mSubmitOrderList = null;


    public interface OnItemClickListener {
        void onItemClick(View view, int position, ArrayList<VideoListBean> msg);

        void onItemLongClick(View view, int position);
    }

    private OnItemClickListener mOnItemClickListener;

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

    public VideoListAdapter(Context context, ArrayList<VideoListBean> datas, String adapterType) {
        this.mContext = context;
        this.mDatas = datas;
        this.itmeViewTag = adapterType;
        mInflater = LayoutInflater.from(context);
    }

    public void updateData(ArrayList<VideoListBean> Datas) {
        if (Datas != null) {

            mDatas = Datas;
            notifyDataSetChanged();
        }
    }

    public void removeorder() {

        for (int i = 0; i < mDatas.size(); i++) {
            mDatas.remove(i);
        }
        notifyDataSetChanged();
    }

    @Override
    public VideoListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        mSubmitOrderList = new ArrayList<>();
        view = mInflater.inflate(R.layout.item_video, parent, false);

        VideoListViewHolder viewHolder = new VideoListViewHolder(view);
        viewHolder.setIsRecyclable(false);

        return viewHolder;
    }

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

        if (choosepos == position){
            holder.fruitImage.setImageResource(R.drawable.ic_video);
        }else {
            holder.fruitImage.setImageResource(R.drawable.ic_launcher);
        }
        try {
            holder.fruitName.setText(mDatas.get(position).getName());
            holder.mDeleteImg.setVisibility(View.INVISIBLE);
            holder.mNumTv.setVisibility(View.GONE);
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (mOnItemClickListener != null)

        {
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    choosepos = position;
                    notifyDataSetChanged();

                    Log.e("Item点击", "Item点击" + position);
                    mOnItemClickListener.onItemClick(holder.itemView, position, mDatas);
//                    mOnItemClickListener.onItemLongClick(holder.itemView, position, mDatas.get(position).getName());
                }
            });

            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {

                    mOnItemClickListener.onItemLongClick(holder.itemView,position);
//                    return false;
                    return true;
                }
            });
        }
    }

    @Override
    public int getItemCount() {

        /**
         * 这里在Account存储购物车数量,用来判断购物车是否为空,如果为空显示刷新页面
         * */
        try {
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 23;
//        return mDatas.size();
    }
}
    class VideoListViewHolder extends RecyclerView.ViewHolder {


        TextView mNumTv;
        ImageView fruitImage;
        TextView fruitName;
        ImageView mDeleteImg;


        public VideoListViewHolder(View itemView) {
            super(itemView);

            fruitImage=(ImageView)itemView.findViewById(R.id.item_food_img);
            fruitName=(TextView) itemView.findViewById(R.id.item_food_name);
            mDeleteImg = itemView.findViewById(R.id.delete_img);
            mNumTv = itemView.findViewById(R.id.select_num_tv);

        }
    }

 

加油!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这个功能的思路如下: 1. 在 RecyclerView 的 Adapter 中定义一个变量来记录当前被选中item 的位置。 2. 在 onBindViewHolder 方法中,根据当前 item 的位置设置背景色。 3. 在 onBindViewHolder 方法中,判断当前 item 是否是被选中item,如果是,则设置背景色,否则取消背景色。 4. 在 RecyclerView 的 OnItemClickListener 中,更新选中item 的位置,并调用 notifyDataSetChanged 方法刷新 RecyclerView。 具体实现代码如下: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> mData; private int mSelectedPosition = -1; public MyAdapter(List<String> data) { mData = data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.textView.setText(mData.get(position)); if (mSelectedPosition == position) { holder.itemView.setBackgroundColor(Color.BLUE); } else { holder.itemView.setBackgroundColor(Color.TRANSPARENT); } holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSelectedPosition = holder.getAdapterPosition(); notifyDataSetChanged(); } }); } @Override public int getItemCount() { return mData.size(); } static class MyViewHolder extends RecyclerView.ViewHolder { TextView textView; MyViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.text_view); } } } ``` 在上面的代码中,我们定义了一个 mSelectedPosition 变量来记录当前被选中item 的位置。在 onBindViewHolder 方法中,我们根据这个变量来设置和取消背景色。在 ViewHolder 的 itemView 上设置 OnClickListener,当用户点击 item 时,我们更新选中的位置并调用 notifyDataSetChanged 方法刷新 RecyclerView

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值