首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android上动态添加元素到ListView?

如何在Android上动态添加元素到ListView?
EN

Stack Overflow用户
提问于 2010-12-28 02:10:34
回答 7查看 590.7K关注 0票数 338

有没有人能解释或者推荐一个在android中动态创建ListView的教程?

以下是我的要求:

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

我知道有很多关于这个话题的问题,但我找不到任何一个来回答我的问题。

EN

回答 7

Stack Overflow用户

发布于 2010-12-28 02:25:35

首先在项目的res/layout/main.xml文件夹中创建一个XML布局:

代码语言:javascript
复制
<?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的id为@android:id/list,它定义了ListActivity可以使用的默认ListView

代码语言:javascript
复制
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是保存ListView中显示的数据的列表。所有的插入和删除都应该在listItems上完成;listItems中的更改应该反映在视图中。这是由ArrayAdapter<String> adapter处理的,应该使用以下命令通知:

adapter.notifyDataSetChanged();

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

票数 592
EN

Stack Overflow用户

发布于 2014-05-22 11:55:42

而不是

代码语言:javascript
复制
listItems.add("New Item");
adapter.notifyDataSetChanged();

您可以直接调用

代码语言:javascript
复制
adapter.add("New Item");
票数 68
EN

Stack Overflow用户

发布于 2014-11-10 17:40:52

首先,你必须在你的activity_main.xml中添加一个ListView,一个EditText和一个按钮。

现在,在你的ActivityMain中:

代码语言:javascript
复制
private EditText editTxt;
private Button btn;
private ListView list;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrayList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editTxt = (EditText) findViewById(R.id.editText);
    btn = (Button) findViewById(R.id.button);
    list = (ListView) findViewById(R.id.listView);
    arrayList = new ArrayList<String>();

    // Adapter: You need three parameters 'the context, id of the layout (it will be where the data is shown),
    // and the array that contains the data
    adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, arrayList);

    // Here, you set the data in your ListView
    list.setAdapter(adapter);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            // this line adds the data of your EditText and puts in your array
            arrayList.add(editTxt.getText().toString());
            // next thing you have to do is check if your adapter has changed
            adapter.notifyDataSetChanged();
        }
    });
}

这对我很有用,希望我能帮到你

票数 61
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4540754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档