android listview的简单使用

                Listview(列表视图)


一.ListView


1.三种Adapter构建ListView

ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法, 常用的ListAdapter有三种

BaseAdapter: 定义一个类继承BaseAdapter, 重写4个抽象方法, ListView的条目是由getView()方法构建出来的

SimpleAdapter: 创建SimpleAdapter对象时, 传入数据(List<Map<String, ?>>), 并指定数据的绑定关系

SimpleCursorAdapter: 创建SimpleCursorAdapter对象时, 传入一个Cursor, 指定数据的绑定关系


2.监听ListView的点击

调用ListView.setOnItemClickListener(OnItemClickListener)方法注册一个监听器

在监听器的onItemClick()方法中使用 parent.getItemAtPosition(position) 方法可以获取指定条目上的数据

BaseAdapter: 返回的就是自定义的getItem()方法中返回的数据

SimpleAdapter: 返回的是一个Map, 就是创建SimpleAdapter时List中的一个Map

SimpleCursorAdapter: 返回的是一个Cursor, 这个Cursor就是创建时传入的Cursor, 但是已经通过moveToPosition()方法指定到点击的索引了


BaseAdapter:

public  class BaseAdapterActivity  extends Activity {
     private ListView personLV;
     private List <Person > persons;
     public  void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 
        PersonDao dao  =  new PersonDao( this);
        persons  = dao.queryAll();                                 // 获取数据   
        personLV  = (ListView) findViewById(R.id.personLV);         // 获取ListView
        personLV.setAdapter( new MyBaseAdapter());                 // 给ListView添加Adapter, 按照Adapter中的方法对ListView添加条目
    } 
     private  class MyBaseAdapter  extends BaseAdapter {             // 定义Adapter, 把每个Person对象生成一个条目, 将所有条目装入ListView
         public  int getCount() {                                     // 返回ListView中要装入的条目的数量
             return persons.size();
        }
         public Object getItem( int position) {                     // 返回指定位置上的对象                    
             return persons.get(position);
        }
         public  long getItemId( int position) {                     // 返回条目的id
             return position;
        }
         public View getView( int position, View convertView, ViewGroup parent) {             // 返回指定位置上的条目, 条目会被自动添加到ListView中
            View item  = View.inflate(getApplicationContext(), R.layout.item, null);         // 根据布局文件创建View(LinearLayout)
            TextView idTV  = (TextView) item.findViewById(R.id.idTV);                     // 获取这个新生成的View中的TextView
            TextView nameTV  = (TextView) item.findViewById(R.id.nameTV);
            TextView balanceTV  = (TextView) item.findViewById(R.id.balanceTV);
            Person p  = persons.get(position);                                             // 根据位置获取Person对象
            idTV.setText(p.getId()  +  "");                                                 // 给TextView设置文本
            nameTV.setText(p.getName());
            balanceTV.setText(p.getBalance()  +  "");
             return item;
        }
    }
}

SimpleAdapter:
public  class SimpleAdapterActivity  extends Activity {
     private ListView personLV;
     private List <Person > persons;
     public  void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        PersonDao dao  =  new PersonDao( this);
        persons  = dao.queryAll();                                       
        List <Map <String, Object >> data  =  new ArrayList <Map <String,Object >>();         // 把每个Person的数据装入一个Map, 再把Map装入List
         for (Person p  : persons) {
            Map <String, Object > map  =  new HashMap <String, Object >();
            map.put( "id", p.getId());
            map.put( "name", p.getName());
            map.put( "balance", p.getBalance());
            data.add(map);
        }      
        personLV  = (ListView) findViewById(R.id.personLV);        
        personLV.setAdapter( new SimpleAdapter( this, data, R.layout.item  //    
                ,  new String[] {  "id""name""balance" }  //
                ,  new  int[] { R.id.idTV, R.id.nameTV, R.id.balanceTV }));        
         /*
         * SimpleAdapter传入指定的数据和布局文件, 以及匹配关系, 自动生成View, 装入ListView
         * 
         * 参数1: 上下文环境
         * 参数2: 数据,  List<Map<String, Object>>, 每个Person的数据装入一个Map, 将所有Map装入List
         * 参数3: 每个listview中的布局xml文件的资源id
         * 参数4: Map中的key, 和参数5中的id对应, 将指定key的value放入View中指定id对应的组件上
         * 参数5: View中的id
         */

    }    
}




ArrayAdapter:

    private ListView listview;
    private ArrayAdapter<String> adapter;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = (ListView) this.findViewById(R.id.listView1);
        adapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_expandable_list_item_1, getDataSource());
        listview.setAdapter(adapter);
    }
    private List<String> getDataSource() {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < 30; i++) {
            list.add("湖南工业大学" + i);
        }
        return list;
    }



ListView 用 setOnItemClickListener这个点击事件。
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = (ListView) this.findViewById(R.id.listView1);
        adapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_expandable_list_item_1, getDataSource());
        listview.setAdapter(adapter);
        listview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Toast.makeText(getApplicationContext(),
                        "点击了" + adapter.getItem(position), 0).show();
            }
        });
    }
    private List<String> getDataSource() {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < 30; i++) {
            list.add("湖南工业大学" + i);
        }
        return list;
    }


activity_listview.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"
     xmlns:tools = "http://schemas.android.com/tools"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent"
     android:orientation = "vertical"
     tools:context = ".ListviewActivity"  >
 
     < ListView
         android:id = "@+id/listview"
         android:layout_width = "fill_parent"
         android:layout_height = "wrap_content"
         android:divider = "#f00"
         android:dividerHeight = "2px"
         android:headerDividersEnabled = "false"  />
 
</ LinearLayout >

simple_item.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<? xml  version = "1.0"  encoding = "utf-8" ?>
< LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent"
     android:orientation = "horizontal"  >
 
     < ImageView
         android:id = "@+id/iv"
         android:layout_width = "80dp"
         android:layout_height = "100dp"
         android:paddingLeft = "20dp"  />
 
     < LinearLayout
         android:layout_width = "match_parent"
         android:layout_height = "wrap_content"
         android:orientation = "vertical"  >
 
         < TextView
             android:id = "@+id/tv1"
             android:layout_width = "wrap_content"
             android:layout_height = "wrap_content"
             android:paddingLeft = "20dp"
             android:textColor = "#f0f"
             android:textSize = "20dp"  />
 
         < TextView
             android:id = "@+id/tv2"
             android:layout_width = "wrap_content"
             android:layout_height = "wrap_content"
             android:paddingLeft = "10dp"
             android:textSize = "20dp"  />
     </ LinearLayout >
 
</ LinearLayout >

listviewActivity.java





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值