Android:遍历listview中的所有项目

时间:2015-05-05 04:58:29

标签: android loops listview items

想要快速回答如何列出我的列表视图中的所有项目,以便打印列表或共享到记事本应用程序等。也就是说,从列表视图中获取包含以下信息的变量:“apple”, “香蕉”,“橙色”。以下是我的列表视图。感谢

    String[] values = new String[] { "apple", "banana", "orange" };

    listItems = new ArrayList<String>();
    for (int i = 0; i < values.length; ++i) {
        listItems.add(values[i]);
    }

    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1,
            listItems);

    // Assign adapter to ListView
    listView.setAdapter(adapter);

4 个答案:

答案 0 :(得分:7)

你的问题是,

  

循环浏览列表视图中的所有项目。

我们从您的代码中了解到您要将String array中的项目添加到ArrayList

但是,您可以将String数组作为第三个参数直接传递给ArrayAdapter

查看Android工作室为ArrayAdapter提供的建议。您也可以传递String[]ArrayList

enter image description here

您可以传递String [],或者如果您想将所有String []项循环到ArrayList,您可以只使用一行。

    Collections.addAll(arrayList,values);

arrayList - ArrayList

- String[]

代替,

    listItems = new ArrayList<String>();
    for (int i = 0; i < values.length; ++i) {
        listItems.add(values[i]);
    }

在评论部分,你说

  

我想我可以在listView之后一次添加/删除项目。

在这种情况下,您可以使用一些按钮重新加载列表以显示旧项目+添加新项目或显示除您已删除项目之外的列表。我将在下面添加如何实现它。

在您的布局中有一个按钮AddMore,无论何时您想要添加新项目,都可以这样做

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

                arrayList.add("lemon"); // this adds item lemon to arraylist
                arrayList.add("Pomgranete");
                arrayAdapter.notifyDataSetChanged(); // this will refresh the listview and shows the newly added items too
            }
        });

您可以通过传递arrayList中的项目位置

来类似地删除项目
      arrayList.remove(arrayList.get(i)); // i is the position & note arrayList starts from 0

所以,总结一切,这里有完整的工作代码:

public class MainActivity extends AppCompatActivity {

    ListView listView;
    String[] values = {"Apple", "Orange", "Banana"};
    List<String> arrayList;
    Button button;

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

        listView = (ListView)findViewById(R.id.listView);
        button = (Button)findViewById(R.id.button);
        arrayList = new ArrayList<String>();

        Collections.addAll(arrayList,values); // here you're copying all items from String[] to ArrayList

        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList);
        listView.setAdapter(arrayAdapter);

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

                arrayList.remove(arrayList.get(2)); // here i remove banana since it's position is two. My ordering of items is different so it removed banana. If i use ordering from your quest, it will remove orange.
                arrayList.add("lemon"); // adding lemon to list
                arrayList.add("Pomgranete"); // adding pomgranete
                arrayAdapter.notifyDataSetChanged(); // this used to refresh the listView
            }
        });

     }
    }

activity_main.xml中

<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"  tools:context=".MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ADD MORE"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/button" />

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_above="@+id/button" />


</RelativeLayout>

输出

列出预先定义的3个项目和一个按钮以加载更多项目。

enter image description here

列出旧的3项+新添加的2项(这里我没有使用arrayList.remove

enter image description here

列出旧项目,但已删除的项目+新添加的2项目(此处我使用arrayList.remove 删除香蕉arrayList.remove(arrayList.get(2));

enter image description here

答案 1 :(得分:0)

据我所知你想创建一个ArrayAdapter,稍后会向它添加一些项目,并在某些时候从中检索所有项目,对吗?

由于您使用ArrayAdapter,您只需迭代其内容:

    String[] items = new String[adapter.getCount()];
    for(int i = 0; i < adapter.getCount(); i++){
        items[i] = adapter.getItem(i);
        Log.d("TAG", "Item nr: " +i + " "+ adapter.getItem(i));
    }

ArrayAdapter documentation

答案 2 :(得分:0)

由于你的代码中已经有一个数组和一个arraylist,所以应该很容易。

但是如果你想稍后循环并且你只有你的listview,我相信你的listview中有一个适配器的getter,如果你把给定的适配器转换为ArrayAdapter,它应该有一个getter到items你在寻找。

ArrayAdapter<String> adapter = (ArrayAdapter<String>)mListView.getAdapter();
for(int i=0; i<adapter.getCount();i++){
    String item = adapter.getItem(i);
    /*...*/
}

答案 3 :(得分:-1)

您不需要循环或只需将数组直接传递给适配器。

adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, android.R.id.text1,
        values);

新的ArrayAdapter将array作为第三个参数。