RecyclerView应用--点击事件处理

RecyclerView

安卓原生的RecyclerView相比同样原生的老古董ListView功能上更加的强大和灵活。

目录

RecyclerView

继承RecyclerView.Adapter

绑定Adapter

item点击事件

item内控件的点击事件


继承RecyclerView.Adapter

和ListView一样,RecyclerView也需要自己的Adapter。

构造函数负责传参,ViewHolder。

public class AddFriendsAdapter extends RecyclerView.Adapter<AddFriendsAdapter.FriendsViewHandler> {
    private List<User> friends;

    public AddFriendsAdapter(List<User> friends) {
        this.friends=friends;
    }

    @Override
    public AddFriendsAdapter.FriendsViewHandler onCreateViewHolder(ViewGroup parent, int viewType) {
        View v=LayoutInflater.from(parent.getContext()).inflate(R.layout.add_friend_outline, parent, false);
        return new FriendsViewHandler(v);
    }

    @Override
    public void onBindViewHolder(AddFriendsAdapter.FriendsViewHandler holder, int position) {
        final int fposition = position;
        final int uid = friends.get(position).getUid();
        holder.outlineMotto.setText(friends.get(position).getMotto());
        holder.outlineNickname.setText(friends.get(position).getNickname());
        //图片处理
        //...

    }

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

    public class FriendsViewHandler extends RecyclerView.ViewHolder {
        @BindView(R.id.outline_portrait)
        ImageView outlinePortrait;
        @BindView(R.id.outline_nickname)
        TextView outlineNickname;
        @BindView(R.id.outline_motto)
        TextView outlineMotto;
        @BindView(R.id.agree_add)
        ImageButton agreeAdd;

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

    }
}

绑定Adapter

@BindView(R.id.friends_list)
RecyclerView mRecyclerView;
...
private FriendsAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private List<User> friends;
...
mLayoutManager=new LinearLayoutManager(this);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter=new FriendsAdapter(friends);
mAdapter.setOnItemListener(itemListener);
mRecyclerView.setAdapter(mAdapter);

item点击事件

先定义一个点击item事件监听器接口

public interface ItemListener {
    void onItemClick(int position, User user);
}

在Adapter的ViewHandler的view中添加点击监听器

public class FriendsAdapter extends RecyclerView.Adapter<FriendsAdapter.FriendsViewHandler> {
    private List<User> friends;
    private ItemListener itemListener;

    public FriendsAdapter(List<User> friends) {
        this.friends=friends;
    }
    public void setOnItemListener(ItemListener itemListener) {
        this.itemListener=itemListener;
    }
    @Override
    public FriendsAdapter.FriendsViewHandler onCreateViewHolder(ViewGroup parent, int viewType) {
        View v =LayoutInflater.from(parent.getContext()).inflate(R.layout.friend_outline, parent, false);
        return new FriendsViewHandler(v);
    }

    @Override
    public void onBindViewHolder(FriendsAdapter.FriendsViewHandler holder, int position) {
        final User user = friends.get(position);
        final int fposition = position;
        holder.outlineMotto.setText(friends.get(position).getMotto());
        holder.outlineNickname.setText(friends.get(position).getNickname());
        //图片最后处理
        //holder.outlinePortrait;
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                itemListener.onItemClick(fposition, user);
            }
        });
    }

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

    public class FriendsViewHandler extends RecyclerView.ViewHolder {
        @BindView(R.id.outline_portrait)
        ImageView outlinePortrait;
        @BindView(R.id.outline_nickname)
        TextView outlineNickname;
        @BindView(R.id.outline_motto)
        TextView outlineMotto;

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

最后,在RecyclerView绑定Adapter的时候实现监听器接口即可

 private ItemListener itemListener = new ItemListener() {
        @Override
        public void onItemClick(int position, User user) {
            //点击事件处理
        }
    };

item内控件的点击事件

先定义一个点击item里控件的事件监听器接口

public interface ItemInnerListener {
    void onItemInnerClick(int position, int uid);
}

 在Adapter的ViewHandler的view的相关控件中添加点击监听器

public class AddFriendsAdapter extends RecyclerView.Adapter<AddFriendsAdapter.FriendsViewHandler> {
    private List<User> friends;
    private ItemInnerListener itemInnerListener;

    public AddFriendsAdapter(List<User> friends) {
        this.friends=friends;
    }

    public void setOnItemInnerListener(ItemInnerListener itemInnerListener) {
        this.itemInnerListener=itemInnerListener;
    }

    @Override
    public AddFriendsAdapter.FriendsViewHandler onCreateViewHolder(ViewGroup parent, int viewType) {
        View v=LayoutInflater.from(parent.getContext()).inflate(R.layout.add_friend_outline, parent, false);
        return new FriendsViewHandler(v);
    }

    @Override
    public void onBindViewHolder(AddFriendsAdapter.FriendsViewHandler holder, int position) {
        final int fposition = position;
        final int uid = friends.get(position).getUid();
        
        holder.agreeAdd.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                itemInnerListener.onItemInnerClick(fposition, uid);
            }
        });

    }

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

    public class FriendsViewHandler extends RecyclerView.ViewHolder {
        @BindView(R.id.outline_portrait)
        ImageView outlinePortrait;
        @BindView(R.id.outline_nickname)
        TextView outlineNickname;
        @BindView(R.id.outline_motto)
        TextView outlineMotto;
        @BindView(R.id.agree_add)
        ImageButton agreeAdd;

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

    }
}

最后,在RecyclerView绑定Adapter的时候实现监听器接口即可

private ItemInnerListener itemInnerListener = new ItemInnerListener() {
    @Override
    public void onItemInnerClick(int position, int uid) {
        //点击事件处理
    }
};

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值