RecyclerView
安卓原生的RecyclerView相比同样原生的老古董ListView功能上更加的强大和灵活。
目录
继承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) {
//点击事件处理
}
};