使用RecyclerView&& 使用资源文件自定义列表项&&RecyclerView的布局样式
0、前期复制sdk中的v7 jar包到工程lib文件目录下。
1、使用RecyclerView
- 在 Android 应用程序中列表是一个非常重要的控件,适用场合非常多,如新闻列表、应用列表、消息列表等等,但是从Android 一出生到现在并没有非常好用的列表控件,早期的 ListView 用法非常复杂,尤其是自定义列表,简直就是地狱,因为其中还涉及到很多效率优化的问题,新手很难写出高效率的基于列表应用,而且 ListView 只能垂直方向呈现内容,使用很不灵活,为了解决这个缺陷,Android 官方推出了 RecyclerView 控件,用来替代 ListView。
-
1 private RecyclerView rv; 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 7 rv = new RecyclerView(this); 8 9 setContentView(rv); 10 11 rv.setLayoutManager(new LinearLayoutManager(this)); 12 13 rv.setAdapter(new RecyclerView.Adapter() { 14 15 class ViewHolder extends RecyclerView.ViewHolder{ 16 private TextView tView; 17 public ViewHolder(TextView arg0) { 18 super(arg0); 19 20 tView = arg0; 21 } 22 23 public TextView gettView() { 24 return tView; 25 } 26 27 } 28 29 @Override 30 public int getItemCount() { 31 // TODO Auto-generated method stub 32 return data.length; 33 } 34 35 @Override 36 public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) { 37 // TODO Auto-generated method stub 38 return new ViewHolder(new TextView(arg0.getContext())); 39 } 40 41 @Override 42 public void onBindViewHolder( 43 android.support.v7.widget.RecyclerView.ViewHolder arg0, 44 int arg1) { 45 // TODO Auto-generated method stub 46 TextView tView = ((ViewHolder)arg0).gettView(); 47 tView.setText("Item "+arg1+":"+data[arg1]); 48 } 49 50 private String[] data = new String[]{"sss","xxxx","aaaa"}; 51 52 }); 53 } - 代码解释:
- 11:设置为线性布局。
- 13--52:设置一个与RecyclerView绑定的Adapter。
- 15--21:自定义了一个ViewHolder与RecyclerView的每一项进行关联。
- getItemCount返回多少项。
- onCreateViewHolder返回创建的每一项的ViewHolder。
- onBindViewHolder当每一项的ViewHolder与RecyclerView进行绑定时执行。
2、使用资源文件自定义列表项
- 设置Adapter:rv.setAdapter(new MyAdapterForRV(this));
- 重写Adapter:
-
1 public class MyAdapterForRV extends RecyclerView.Adapter { 2 /** 3 * 4 */ 5 private MainActivity MyAdapterForRV; 6 7 /** 8 * @param mainActivity 9 */ 10 MyAdapterForRV(MainActivity mainActivity) { 11 MyAdapterForRV = mainActivity; 12 } 13 14 class ViewHolder extends RecyclerView.ViewHolder{ 15 private View root; 16 private TextView tvTitle,tvContent; 17 public ViewHolder(View arg0) { 18 super(arg0); 19 root = arg0; 20 21 tvTitle = (TextView) root.findViewById(R.id.tv_title); 22 tvContent = (TextView) root.findViewById(R.id.tv_content); 23 } 24 25 public TextView getTvTitle() { 26 return tvTitle; 27 } 28 29 public TextView getTvContent() { 30 return tvContent; 31 } 32 } 33 34 @Override 35 public int getItemCount() { 36 // TODO Auto-generated method stub 37 return data.length; 38 } 39 40 @Override 41 public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) { 42 // TODO Auto-generated method stub 43 return new ViewHolder(LayoutInflater.from(arg0.getContext()).inflate(R.layout.item, null)); 44 } 45 46 @Override 47 public void onBindViewHolder( 48 android.support.v7.widget.RecyclerView.ViewHolder arg0, 49 int arg1) { 50 51 TextView tvtitleTextView = ((ViewHolder)arg0).getTvTitle(); 52 TextView tvcontenTextView = ((ViewHolder)arg0).getTvContent(); 53 tvtitleTextView.setText(data[arg1].titleString); 54 tvcontenTextView.setText(data[arg1].contentString); 55 } 56 57 private ItemData[] data = new ItemData[]{new ItemData("李阳","天才代码"),new ItemData("彭燕","笨蛋"), 58 new ItemData("李阳","天才代码"),new ItemData("彭燕","笨蛋"), 59 new ItemData("李阳","天才代码"),new ItemData("彭燕","笨蛋")}; 60 }
3、RecyclerView的布局样式
1 rv.setLayoutManager(new LinearLayoutManager(this)); 2 rv.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false)); 3 rv.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true)); 4 rv.setLayoutManager(new GridLayoutManager(this,3)); 5 rv.setLayoutManager(new GridLayoutManager(this,3,LinearLayoutManager.HORIZONTAL,false));
- 1:线性布局垂直方向。
- 2:线性水平方向,不反转。
- 3:线性布局水平方向,反转。
- 4:三列。
- 5:三行,不反转。

浙公网安备 33010602011771号