虽然之前知道这个,但是一直没有用过,所以就试了一下。
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<String> mList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
recyclerView = (RecyclerView)findViewById(R.id.recycleView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(new MyAdapter());
}
public void initData(){
for(int i = 0;i<20;i++){
mList.add("item:"+i);
}
}
class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.adpter_layout,parent,false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.textView.setText(mList.get(position));
}
@Override
public int getItemCount() {
return mList.size();
}
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView textView;
public MyViewHolder(View itemView) {
super(itemView);
textView = (TextView)itemView.findViewById(R.id.textView);
}
}
}
这里需要注意的一个地方就是
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.adpter_layout,parent,false);
之前在设置这样,然后item的layout的都是match_parent,所以运行的结果只显示第一条数据。
后来看了别人的,说把
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.adpter_layout,null,false);
改成这样,确实可以出现所有的数据,但是这样好像会造成一些问题。
之后,才知道,RecyclerView和ListView相比没那么智能,它并不会自适应item的大小,如果
RecyclerView的layout都设置成match_parent,他一个数据就会占满整个页面,所以在写item的布局文件时要注意。