ListView是列单形式显示的组件,和GridView类似,我们也需要用到Adapter来控制数据与组件之间的联系。ListView有两种方式显示,一种是继承了ListActivity的Activity,整个UI都是个ListView;另一种是单独的ListView设置.
现在来看看继承ListActivity的ListView:
程序运行效果:
继承ListActivity的Activity会自动生成一个ListView来填充整个UI,我们不要通过设置setCotentView来设置UI. 在这个ListView里面全部都是TextView组件,在main.xml中定义,而TextView里面的内容则是在strings.xml中定义的,通过<string-array>标签来定义。
strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, MyListViewActivity!</string> <string name="app_name">Showlistview</string> <!-- 设置String数组 --> <string-array name="students"> <item>邓光桥</item> <item>邓名流</item> <item>向洪伟</item> <item>何德聪</item> <item>张龙灿</item> <item>许仙</item> <item>姚明</item> <item>乔丹</item> <item>邓稼先</item> <item>蔡元培</item> <item>许三多</item> <item>王宝强</item> </string-array> </resources>
main.xml
<?xml version="1.0" encoding="utf-8"?> <!-- 在整个XML设置为一个TextView --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" android:textSize="20dp" />
MyListViewActivity:
public class MyListViewActivity extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); // 得到要显示的数据,在strings.xml中定义的string-array final String[] data = getResources().getStringArray(R.array.students); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.main, data); setListAdapter(adapter); // 得到这个ListActivity自动生成的ListView ListView listView = getListView(); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MyListViewActivity.this, "你选择的学生是:" + data[position] + "\n" + "学生ID是:" + (position + 1), Toast.LENGTH_LONG).show(); } }); } }
如果要单独的实现listView,只要在UI里面添加ListView,在设置这个ListView的Adapter就可以了,和上面出不多。
不过现在有个问题:不知道ListView里面可不可以放其他类型的控件,我试过EditText也是可以的,不过Button就出错了,而且layout也会出错,不知道哪位可以告诉我怎么实现呢?