android组件ListView学习笔记

ListView需要绑定数据源,除了ArrayAdapterSimpleAdapter可以和ListView关联之外,SimpleCursorAdapter也是一种常见的和ListView进行关联的数据源,不过SimpleCursorAdapterListView需要数据库数据作为数据源进行数据绑定时使用的。

   关于AndroidManifest.xml中一般都有类似如下的描述信息:

 

  -----------------------------------------------------------------------------------------------------------------------

                   <activity android:name=".ActivityMain"

                  android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

 

  -----------------------------------------------------------------------------------------------------------------------

 

其中的intent-filter中的<action><category android:name=”android.intent.category.LAUNCHER”来说明当在程序启动的时候首先启动ActivityMain这个activity.

 

关于ArrayAdapter:

-----------------------------------------------------------------------------------------------------------------------

         ListView listView = new ListView(this);

       //Context为参数新建一个ListView(列表)实例;

        listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data));

      //listViewArrayAdapter进行绑定;ListAdapter继承于Adapter,//ListView和里面数据的适配器。希望一个ListView显示出来,需要3个东西:

//ListView(需要被显示的东西);

        //Data,ListView绑定的数据,一般是一个Cursor或者一个字符串数组;

        //ListAdapter,dataListView的桥梁,一个适配器作用;

 

        setContentView(listView);

-----------------------------------------------------------------------------------------------------------------------

        

         关于ArrayAdapter:

                   ArrayAdapterListAdapter的一个直接子类,它的作用是一个数组和ListView之间的桥梁,它可以将数组里面定义的数组一一对应的显示在ListView里面。通常由ArrayAdapter进行适配的ListView每一项通常只有一个TextView

 

         关于android系统默认的布局方式:

         项目中自己定义的布局方式可以通过R.layout.XX访问;Android系统提供了很多种默认的布局方式,经常用的包括如下布局:

         android.R.layout.simple_list_item_1,每一项只有一个TextView;

         android.R.layout.simple_list_item_2,每一项只有两个TextView;

         android.R.layout.simple_list_item_single_choice,每一项有一个TextView,但是这一项可以被选择。

 

         关于SimpleAdapter

         SimpleAdapter也是ListAdapter的直接子类。通过SimpleAdapter可以让ListView当中的每一项内容更加个性化;通常将ListView中某项的布局信息写在一个XML的布局文件中,布局文件通过R.layout.XX获得;

        

 

         ArrayAdapter是数组和ListView间的桥梁,SimpleAdapterArrayList<Map<String,?>>ListView之间的桥梁;ArrayList当中的每一项Map对象都和ListView当中的一项进行数据绑定和一一对应。

 

         SimpleAdapter的构造函数:

         SimpleAdapter(Context context,List<? extents Map<String,?>> data,int resource,String[] from , int[] to);

         Context:应用的上下文环境;

         Data:基于MapListData里边的每一项是一个Map类型,这个Map类中包含了ListView中每一行需要的数据,比较常用的用法:data = new ArrayList<Map<String,Object>>();

         Resource:这个Resource就是一个layout,这个layout最起码要包含在to中出现的那些View。一般用系统提供的就ok,当然也可以自己定义。系统提供的有:android.R.layout.simple_list_item_single_choice,android.R.layout.two_line_list_item;

         From:一个名字的数组,每个名字是为了在ArrayList中的每一个item中索引Map<String,Object>Object用的;

         To:里面是一个TextView的数组,这些TextView是以id的形式来标示的;

 

代码示例:

--------------------------------------------------------------------------------------------------------------------------

         public class ActivityList2 extends Activity {

    List<Map<String,String>> data;

    //ListView中的每一项都包含两个TextView,系统将data[i].get("姓名")的值显示在idmview1TextView,

    //data[id].get("性别")的值显示在idmview2TextView;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

       

        prepareData();

        //新建一个ListView;

        ListView listView = new ListView(this);

       

        //SimpleAdapter adapter = new SimpleAdapter(this,data,R.layout.listitem,new String[]{"姓名","性别"}, new int[]{R.id.mview1,R.id.mview2});

        // listitem规定了ListView当中每一项的布局; {"姓名","性别"}listView通过item.get()获得值

       

        SimpleAdapter adapter = new SimpleAdapter(this,data,android.R.layout.two_line_list_item,new String[]{"姓名","性别"},new int[]{android.R.id.text1,android.R.id.text2});

        listView.setAdapter(adapter);

       

        setContentView(listView);

        setTitle("ActivityList2");

    }

   

    //准备一个Map类型的ArrayList对象;

    private void prepareData(){

       data = new ArrayList<Map<String,String>>();

       Map<String,String> item = new HashMap<String,String>();

      

       item.put("姓名", "张三小朋友");

       item.put("性别", "");

       data.add(item);

      

       item = new HashMap<String,String>();

       item.put("姓名", "王五同学");

       item.put("性别", "");

       data.add(item);

      

       item = new HashMap<String,String>();

       item.put("姓名", "小李师傅");

       item.put("性别", "");

       data.add(item);

      

    }

}

--------------------------------------------------------------------------------------------------------------------------

 

增加事件监控机制:

AdapterView.OnItemClickListener;

代码示例:

--------------------------------------------------------------------------------------------------------------------------

                       OnItemClickListener listener = new OnItemClickListener(){

       public void onItemClick(AdapterView<?> parent,View view,int position,long id){

           setTitle(parent.getItemAtPosition(position).toString());

       }

    };

    listview.setOnItemClickListener(listener);

--------------------------------------------------------------------------------------------------------------------------

 

 

 

你可能感兴趣的:(android组件ListView学习笔记)