RecyclerView适配器,继承的我自己的类的viewholder。继承RecyclerView.ViewHolder也可以。简单的布局没有多条目展示的都可以继承自己类的viewholder。布局我就不粘啦。
导包
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder> {
private List<User> list;
//获得控件id
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.text);
imageView = itemView.findViewById(R.id.images);
}
}
public Myadapter(List<User> user) {
this.list = user;
}
//创建ViewHolder实例
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//加载布局
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
//用于对RecyclerView子项的数据进行赋值
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textView.setText(list.get(position).getName());
holder.imageView.setImageResource(list.get(position).getIm());
}
@Override
public int getItemCount() {
return list.size();
}
}
MainActivity类
private List<User> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//添加数据
loadData();
//获取id
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
Myadapter adapter = new Myadapter(list);
recyclerView.setAdapter(adapter);
}
private void loadData() {
User u1 = new User("a", R.drawable.a);
User u2 = new User("g", R.drawable.g);
User u3 = new User("b", R.drawable.b);
User u4 = new User("c", R.drawable.c);
User u5 = new User("d", R.drawable.e);
User u6 = new User("e", R.drawable.f);
User u7 = new User("f", R.drawable.h);
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
list.add(u5);
list.add(u6);
list.add(u7);
}
User的属性
public class User {
private String name;
private Integer im;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getIm() {
return im;
}
public void setIm(Integer im) {
this.im = im;
}
public User(String name, Integer im) {
this.name = name;
this.im = im;
}
}
效果图
实现刷新加载
在之前的基础上添加以下代码就可以了。跟xlistview的使用基本相似。
需要到的jar包:
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
导完后这个 compile ‘com.android.support:appcompat-v7:26.+’会报错,不用管它不妨碍运行
public class MainActivity extends AppCompatActivity **implements XRecyclerView.LoadingListener** {
private List<User> list = new ArrayList<>();
**private XRecyclerView recyclerView;**
**int page = 0;**
private Myadapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//添加数据
loadData();
**//获取id
recyclerView = (XRecyclerView) findViewById(R.id.x_recyc);
// 对XRecycleView设置可以加载和刷新
recyclerView.setLoadingListener(this);
recyclerView.setPullRefreshEnabled(true);
//设置刷新风格
recyclerView.setLoadingMoreProgressStyle(ProgressStyle.BallPulseRise);**
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
adapter = new Myadapter(list);
recyclerView.setAdapter(adapter);
}
private void loadData() {
User u1 = new User("a", R.drawable.a);
User u2 = new User("g", R.drawable.g);
User u3 = new User("b", R.drawable.b);
User u4 = new User("c", R.drawable.c);
User u5 = new User("d", R.drawable.e);
User u6 = new User("e", R.drawable.f);
User u7 = new User("f", R.drawable.h);
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
list.add(u5);
list.add(u6);
list.add(u7);
}
**@Override
public void onRefresh() {
//清空集合
list.clear();
page = 1;
loadData();
recyclerView.loadMoreComplete();
recyclerView.refreshComplete();
adapter.notifyDataSetChanged();
}
@Override
public void onLoadMore() {
page++;
loadData();
recyclerView.loadMoreComplete();
recyclerView.refreshComplete();
adapter.notifyDataSetChanged();
}**
}