zoukankan      html  css  js  c++  java
  • android控件学习之listview

    listview用来展示列表数据

    一、entries生成数据

    1  <ListView 
    2   android:layout_width="wrap_content"
    3   android:layout_height="wrap_content"
    4   android:entries="@array/books" 
    5   android:footerDividersEnabled="false" 
    6     />

    arrays.xml的配置

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <resources>
    3     <string-array name="books">
    4         <item>android</item>
    5         <item>think in java</item>
    6         <item>我的未来不是梦</item>
    7     </string-array>
    8 </resources>

    效果显示

    二、ArrayAdapter生成数据

    布局xml的配置

    1 <ListView android:id="@+id/list1"
    2  android:layout_width="wrap_content"
    3  android:layout_height="wrap_content" />

    android中的代码

    1 ListView listView = (ListView) findViewById(R.id.list1);
    2         String teches[] = { "android", "java", "oracle" };
    3         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    4                 android.R.layout.simple_list_item_1, teches);
    5         listView.setAdapter(adapter);

    这里需要注意的是arrayadapter的第二个参数,有多少选择,这里不做深入讨论

    三、继承ListActivity生成数据

     1 public class ListView2 extends ListActivity{
     2 
     3     @Override
     4     protected void onCreate(Bundle savedInstanceState) {
     5         // TODO Auto-generated method stub
     6         super.onCreate(savedInstanceState);
     7         
     8         String arrs[]={"aa","bb"};
     9         ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,arrs);
    10         setListAdapter(adapter);
    11         
    12         
    13     }
    14 }

    这里需要注意的是无需指定一个布局xml

    四、SimpleAdapter生成数据

    xml布局

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:layout_width="match_parent" android:layout_height="match_parent">
     3 
     4     <ImageView android:id="@+id/iamgeview1" android:layout_width="wrap_content" android:layout_weight="1"
     5         android:layout_height="wrap_content"></ImageView>
     6 
     7 <LinearLayout android:layout_width="wrap_content" android:layout_weight="1"
     8         android:layout_height="wrap_content" android:orientation="vertical">
     9         <TextView android:id="@+id/title" android:layout_width="wrap_content"
    10         android:layout_height="wrap_content" android:textSize="18sp"></TextView>
    11         
    12         <TextView android:id="@+id/content" android:layout_width="wrap_content"
    13         android:layout_height="wrap_content" android:textSize="14sp" android:gravity="bottom|center_vertical"></TextView>
    14         
    15         </LinearLayout>
    16 
    17 </LinearLayout>

    android中的代码

     1 public class ListView3 extends ListActivity {
     2 
     3     @Override
     4     protected void onCreate(Bundle savedInstanceState) {
     5         // TODO Auto-generated method stub
     6         super.onCreate(savedInstanceState);
     7 
     8         SimpleAdapter adapter = new SimpleAdapter(this, getData(),
     9                 R.layout.listview3, new String[] { "img", "title", "content" },
    10                 new int[] { R.id.iamgeview1, R.id.title, R.id.content });
    11         this.setListAdapter(adapter);
    12 
    13     }
    14 
    15     int images[] = new int[] { R.drawable.ferrari, R.drawable.lamborghini,
    16             R.drawable.porsche };
    17 
    18     public List<Map<String, Object>> getData() {
    19         List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
    20         for (int i = 0; i < images.length; i++) {
    21             Map<String, Object> map = new HashMap<String, Object>();
    22             map.put("img", images[i]);
    23             map.put("title", "superCar" + i);
    24             map.put("content", "superCar description" + i);
    25             datas.add(map);
    26         }
    27         return datas;
    28     }
    29 
    30 }

    效果图

    由于图片比较大,造成展示的效果不是很好,姑且先如此吧

    五、自定义BaseAdapter生成数据

    这里需要说明的是,实际开发中,自定义baseAdapter来完成需求是很常用的,同时也是listview真正需要掌握的地方

    自定义好处在于可以灵活布局

    假设现在我们有一个需求,那就是给list中的每条记录添加一个button控件,并且添加事件,用之前的方式就无法满足我们的需求

    对比用SimpleAdapter的方式

    效果图先上

    布局xml

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:layout_width="match_parent" android:layout_height="match_parent">
     3 
     4     <ImageView android:id="@+id/img" android:layout_width="wrap_content" 
     5         android:layout_height="wrap_content"></ImageView>
     6 
     7 <LinearLayout android:layout_width="wrap_content" 
     8         android:layout_height="wrap_content" android:orientation="vertical">
     9         <TextView android:id="@+id/head" android:layout_width="wrap_content"
    10         android:layout_height="wrap_content" android:textSize="18sp"></TextView>
    11         
    12         <TextView android:id="@+id/info" android:layout_width="wrap_content"
    13         android:layout_height="wrap_content" android:textSize="14sp" android:gravity="bottom|center_vertical"></TextView>
    14         
    15         </LinearLayout>
    16         
    17         <Button android:id="@+id/btn" android:layout_width="wrap_content" 
    18         android:layout_height="wrap_content"></Button>
    19 
    20 </LinearLayout>
    1     protected void onCreate(Bundle savedInstanceState) {
    2         // TODO Auto-generated method stub
    3         super.onCreate(savedInstanceState);
    4         //datas = getData();
    5         MyAdapter adapter=new MyAdapter(this);
    6         setListAdapter(adapter);
    7 
    8     }
     1 /** 自定义适配器 */
     2     public  class MyAdapter extends BaseAdapter {
     3         private LayoutInflater mInflater;
     4 
     5         public MyAdapter(Context context) {
     6             this.mInflater = LayoutInflater.from(context);
     7 
     8         }
     9 
    10         @Override
    11         public int getCount() {
    12             // TODO Auto-generated method stub
    13             return datas.size();
    14         }
    15 
    16         @Override
    17         public Object getItem(int position) {
    18             // TODO Auto-generated method stub
    19             return position;
    20         }
    21 
    22         @Override
    23         public long getItemId(int position) {
    24             // TODO Auto-generated method stub
    25             return position;
    26         }
    27 
    28         @Override
    29         public View getView(int position, View convertView, ViewGroup parent) {
    30             // TODO Auto-generated method stub
    31             // convertView.setTag(tag)
    32             ViewHolder holder = null;
    33             if (null == convertView) {
    34                 convertView = this.mInflater.inflate(R.layout.listview4, null);
    35                 
    36             ImageView img=        (ImageView)convertView.findViewById(R.id.img);
    37             TextView info=(TextView)convertView.findViewById(R.id.info);
    38             TextView head=(TextView)convertView.findViewById(R.id.head);
    39             Button btn=(Button)convertView.findViewById(R.id.btn);
    40             img.setBackgroundResource(R.drawable.icon);
    41             info.setText("info"+position);
    42             head.setText("head_"+position);
    43             btn.setText("btn_"+position);
    44             final int index=position;
    45             btn.setOnClickListener(new OnClickListener() {
    46             
    47                 @Override
    48                 public void onClick(View v) {
    49                     new AlertDialog.Builder(ListView4.this).setTitle("title").setMessage("info"+index)
    50                     .setPositiveButton("", new DialogInterface.OnClickListener() {
    51                         
    52                         @Override
    53                         public void onClick(DialogInterface dialog, int which) {
    54                             // TODO Auto-generated method stub
    55                             
    56                         }
    57                     }).show();
    58                     
    59                 }
    60             });
    61             
    62             return convertView;
    63         }

    考虑到多次展示问题,android为我们提供了缓存机制,避免每一次都去findviewid一次

     

     

     

  • 相关阅读:
    【加密】 RSA
    【Resource】【ResourceLoader】【ResourcePatternResolver】学习
    【拦截器】Springboot项目之拦截器使用
    【OpenSSl】linux下OpenSSL的RSA密钥生成
    【微服务架构】图解
    【md5】几种常见的数据摘要算法(MD5、CRC32、SHA1和SHA256)
    【VM VirtualBox】【Vagrant】的安装及使用
    VUE中解决echarts数据二次渲染不成功的问题xAxis
    TypeError: Cannot read property 'map' of null
    VS code 卡顿很严重
  • 原文地址:https://www.cnblogs.com/draem0507/p/2746456.html
Copyright © 2011-2022 走看看