首页 文章

动态添加元素到listView Android

提问于
浏览
294

谁能解释或建议在android中创建listView的教程?

这是我的要求:

  • 我应该能够通过按下按钮动态添加新元素 .

  • 应该足够简单(例如,可能没有任何性能改进或转换视图)

我知道有很多关于这个主题的问题,在StackOverflow上发布,但找不到任何能回答我问题的问题 . 谢谢!

5 回答

  • 58

    首先在项目的 res/layout/main.xml 文件夹中创建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 的id为 @android:id/list ,它定义了 ListView 可以使用的默认值 ListView .

    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 是一个List,用于保存ListView中显示的数据 . 所有插入和删除都应在 listItems 上完成; listItems 中的更改应反映在视图中 . 这是由 ArrayAdapter<String> adapter 处理的,应该通过以下方式通知:

    adapter.notifyDataSetChanged();

    适配器实例化有3个参数:上下文,可能是你的 activity/listactivity ;单个列表项的布局;最后,列表,即列表中显示的实际数据 .

  • 47

    代替

    listItems.add("New Item");
    adapter.notifyDataSetChanged();
    

    你可以直接打电话

    adapter.add("New Item");
    
  • 572

    首先,您必须在activity_main.xml中添加ListView,EditText和按钮 .

    现在,在您的ActivityMain中:

    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();
            }
        });
    }
    

    这对我有用,我希望我帮助过你

  • 7

    如果您想在AppCompatActivity而不是ListActivity中使用ListView,您可以执行以下操作(修改@ Shardul的答案):

    public class ListViewDemoActivity extends AppCompatActivity {
        //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;
        private ListView mListView;
    
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.activity_list_view_demo);
    
            if (mListView == null) {
                mListView = (ListView) findViewById(R.id.listDemo);
            }
    
            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();
        }
    
        protected ListView getListView() {
            if (mListView == null) {
                mListView = (ListView) findViewById(R.id.listDemo);
            }
            return mListView;
        }
    
        protected void setListAdapter(ListAdapter adapter) {
            getListView().setAdapter(adapter);
        }
    
        protected ListAdapter getListAdapter() {
            ListAdapter adapter = getListView().getAdapter();
            if (adapter instanceof HeaderViewListAdapter) {
                return ((HeaderViewListAdapter)adapter).getWrappedAdapter();
            } else {
                return adapter;
            }
        }
    }
    

    在你的布局而不是使用 android:id="@android:id/list" 你可以使用 android:id="@+id/listDemo"

    所以现在你可以在正常的 AppCompatActivity 中使用 ListView .

  • 16

    Code for MainActivity.java file.

    public class MainActivity extends Activity {
    
        ListView listview;
        Button Addbutton;
        EditText GetValue;
        String[] ListElements = new String[] {
            "Android",
            "PHP"
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            listview = (ListView) findViewById(R.id.listView1);
            Addbutton = (Button) findViewById(R.id.button1);
            GetValue = (EditText) findViewById(R.id.editText1);
    
            final List < String > ListElementsArrayList = new ArrayList < String >
                (Arrays.asList(ListElements));
    
    
            final ArrayAdapter < String > adapter = new ArrayAdapter < String >
                (MainActivity.this, android.R.layout.simple_list_item_1,
                    ListElementsArrayList);
    
            listview.setAdapter(adapter);
    
            Addbutton.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
    
                    ListElementsArrayList.add(GetValue.getText().toString());
                    adapter.notifyDataSetChanged();
                }
            });
        }
    }
    

    Code for activity_main.xml layout file.

    <RelativeLayout 
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:paddingBottom="@dimen/activity_vertical_margin"
      android:paddingLeft="@dimen/activity_horizontal_margin"
      android:paddingRight="@dimen/activity_horizontal_margin"
      android:paddingTop="@dimen/activity_vertical_margin"
      tools:context="com.listviewaddelementsdynamically_android_examples
        .com.MainActivity" >
    
      <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText1"
        android:layout_centerHorizontal="true"
        android:text="ADD Values to listview" />
    
      <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="26dp"
        android:ems="10"
        android:hint="Add elements listView" />
    
      <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:layout_centerHorizontal="true" >
      </ListView>
    
    </RelativeLayout>
    

    ScreenShot

    enter image description here

相关问题