[Android 成长之路]2-实现带图标的ListView

--by San[kotomifi@gmail.com]

  在编写列表时,如果是普通的列表,使用ListView + ArrayAdapter 即可实现,但是如果要在每个列表项中文字前配一个图标了,或者在文字后面再配一个图标,这个就可以用 SimpleAdapter 实现了,不要被它的名字欺骗了,It is not simple, it is powerful.

  我们以制作一个带图标的菜单列表为例,首先我们创建一个布局文件 menu_frame.xml,里面包含一个 ListView, 代码如下:

  

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:padding="5dp"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6     
 7     <ListView
 8         android:id="@+id/menu_list"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"
11         />
12     
13 </LinearLayout>

  然后我们创建一个菜单项的布局文件 menu_items.xml, 里面包含一个 ImageView 和一个 TextView, 代码如下:

    

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:id="@+id/menu_item"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="horizontal"
 7     android:paddingTop="40dp">
 8     
 9     <!-- 菜单项的图标 -->
10     <ImageView
11         android:id="@+id/menu_img"
12         android:layout_width="wrap_content"
13         android:layout_height="wrap_content"
14         android:paddingLeft="10dp"
15         android:contentDescription="@string/hello_world"
16         />
17     
18     <!-- 菜单项的文字 -->
19     <TextView
20         android:id="@+id/menu_name"
21         android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23         android:paddingLeft="10dp"
24         android:textSize="20sp"
25         />
26     
27 </LinearLayout>

 

  菜单和菜单项的布局都编写好了,现在把他们结合起来

  

 1         String[] menuNames = {"first", "second", "third", "fouth" };
 2         int[] menuImg = {
 3                 R.drawable.ic_top_bar_send_disabled,
 4                 R.drawable.ic_about_us,
 5                 R.drawable.ic_app_recommendation,
 6                 R.drawable.ic_article_more_item_read_it_later
 7         };
 8         List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
 9         for (int i = 0; i < menuNames.length; i++ ) {
10             Map<String, Object> listItem = new HashMap<String, Object>();
11             listItem.put("img", menuImg[i]);
12             listItem.put("name", menuNames[i]);
13             listItems.add(listItem);
14         }
15         SimpleAdapter sampleAdapter = new SimpleAdapter(this
16                 , listItems
17                 , R.layout.menu_items
18                 , new String[] {"img", "name"}
19                 , new int[] { R.id.menu_img, R.id.menu_name}
20             );
21         
22         menuListView = (ListView)findViewById(R.id.menu_list);
23         menuListView.setAdapter(sampleAdapter);

  这里面主要就是 SimpleAdapter,  说一下几个参数的意思

  • 第二个参数是一个 List<Map<String, ?>> 的集合,该集合中每个 Map<String, ?> 可生成一本列表项
  • 指定一个布局界面的 ID
  • 该参数是一个 String[] 类型的参数,该参数决定取 Map<String, ?> 对象中哪些 key 对应的 value 来生成列表项
  • 该参数是一个 int[] 类型的参数,该参数决定填充哪些组建(对应 menu_items.xml 中定义的id)

[Android 成长之路]2-实现带图标的ListView,布布扣,bubuko.com

[Android 成长之路]2-实现带图标的ListView

上一篇:Android中通过WebView控件实现与JavaScript方法相互调用的地图应用


下一篇:ios异常处理