使用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:三行,不反转。
posted @ 2015-05-27 18:38  何人之名  阅读(231)  评论(0)    收藏  举报