动态添加元素到ListView Android

时间 2010-12-28
阅读 463785
点赞 294
收藏 135
连接user555217

有人能解释或建议在Android中创建ListView的教程吗?

以下是我的要求:

  • 我应该能够通过按一个按钮动态添加新元素。
  • 应该足够简单,以便理解(例如,可能没有任何性能改进或ConvertView)

我知道在StackOverflow上有很多关于这个主题的问题,但是找不到任何可以回答我问题的答案。谢谢!

建议答案

首先在项目的res/layout/main.xml文件夹:

<?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" >
    <Button
        android:id="@+id/addBtn"
        android:text="Add New Item"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="addItems"/>
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:drawSelectorOnTop="false"
    />
</LinearLayout>

这是一个简单的布局,顶部有一个按钮,底部有一个列表视图。请注意ListView有身份证@android:id/list它定义了默认值ListViewListActivity可以使用。

public class ListViewDemo extends ListActivity {
    //LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
    ArrayList<String> listItems=new ArrayList<String>();

    //DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LISTVIEW
    ArrayAdapter<String> adapter;

    //RECORDING HOW MANY TIMES THE BUTTON HAS BEEN CLICKED
    int clickCounter=0;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        adapter=new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,
            listItems);
        setListAdapter(adapter);
    }

    //METHOD WHICH WILL HANDLE DYNAMIC INSERTION
    public void addItems(View v) {
        listItems.add("Clicked : "+clickCounter++);
        adapter.notifyDataSetChanged();
    }
}

android.R.layout.simple_list_item_1是由Android提供的默认列表项布局,您可以将此库存布局用于非复杂事物。

listItems保存列表视图中显示的数据的列表。所有的插入和移除都应在listItems;变化listItems应该反映在视图中。由…处理ArrayAdapter<String> adapter,应使用以下方式通知:

adapter.notifyDataSetChanged();

适配器是用3个参数实例化的:上下文,它可以是activity/listactivity;单个列表项的布局;最后是列表,它是要在列表中显示的实际数据。

👍 572