ArrayAdapter(Context context, int textViewResourceId, List<T> objects)ArrayAdapter(Context context, int textViewResourceId, List<T> objects)继续Android控件开发之四----ListView(1)下面在介绍下ArrayAdapter的相关知识
给出ArrayAdapter的构造函数
(1)ArrayAdapter(Context context, int textViewResourceId)第一个参数context,第二个参数是指要显示的布局(包括TextView)的ID(The resource ID for a layout file containing a TextView to use when instantiating views.)
(2)ArrayAdapter(Context context, int resource, int textViewResourceId)第一个参数context,第二个参数是指要显示的布局(包括TextView)的ID,第三个参数是参数2中布局中需要显示的TextView的ID;
(3)ArrayAdapter(Context context, int textViewResourceId, T[] objects) (4)ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
第一个参数context,第二个参数是指要显示的布局(包括TextView)的ID,第三个参数需要显示的数据源;
(5)ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) (6)ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
第一个参数context,第二个参数是指要显示的布局(包括TextView)的ID,第三个参数是参数2中布局中需要显示的TextView的ID,第四个参数需要显示的数据源;
下面给个例子,是刚开始没有数据,动态增加数据,用(1)ArrayAdapter(Context context, int textViewResourceId)这个构造函数,这里也可以用构造函数(2),只要在构造函数那增加要显示的TextView的ID
package com.potato; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.ListView; public class ListViewArrayAdapterListActivity extends ListActivity // 注1 { int mCount = 0; ArrayAdapter<String> mAdapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ListView list = getListView(); // 注2 mAdapter = new ArrayAdapter<String>(this, // 注5 android.R.layout.simple_list_item_1); list.setAdapter(mAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) // 注3 { menu.add(0, 1, 1, "add"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) // 注3 { switch (item.getItemId()) { case 1: { mCount++; // 实现实时更新,无需其他操作 // adapter.add()和items.add()操作的是同一个List<T>对象, // 不同的是adapter.add()完成后会自动更新UI, // items.add()之后还要显示的调用adapter.notifyDataSetChanged()来更新UI。 mAdapter.add("item" + mCount); // 注4 } break; } return super.onOptionsItemSelected(item); } }
注1
ListActivity是继承与Acitvity,会在后面的章节会解释,这里先不做介绍;
注2
getListView()是在继承与ListActivity的情况下,获取ListView对象;
注3
这两个函数用于处理Optionmenu,后续章节介绍;
注4
实现数据的动态加载,增加了数据,自动就会刷新ui,数据就会显示在ListView上;
这里有两种实现方式:
(1)直接调用arrayAdapter的add,把数据加入,这样ui会自动更新;
(2)另一种是先吧数据加到链表中,在通过adapter.notifyDataSetChanged(),实现数据的更新;
注5
可以使用构造函数(2)
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1);
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/drawable_backgroud" > <!-- <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add item" android:id="@+id/btnAdd" /> --> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" android:fadingEdge="vertical" android:background="@drawable/drawable_backgroud"/> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="no data" /> </LinearLayout>
至于构造函数3,4,5,6在上一篇博文ListView(1)中已经使用过。。。。
有问题请留言或者发邮件。。。
联系方式:[email protected]