Android : 遍历列表视图中的所有项目

Android : loop through all items in a listview

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

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

您无需循环或任何操作,只需将数组直接传递给适配器即可。

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

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

据我所知,您想创建一个 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

因为您的代码中已经有一个数组和一个数组列表,所以应该很容易。

但是如果你想稍后循环并且你只有你的列表视图,我相信你的列表视图中有一个用于适配器的 getter,如果你将给定的适配器转换为 ArrayAdapter,它应该有a getter 到您要查找的项目。

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

你的问题是,

Loop through all items in a listview.

我从你的代码中了解到你想要添加从 String arrayArrayList 的项目。

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

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

您可以传递 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]);
    }

你在评论区说

I think I may add/remove item at a time to the listView later.

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

在您的布局中有一个按钮 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 个项目和一个用于加载更多项目的按钮的列表。

包含旧的3项+新增2项的列表(这里我没有使用arrayList.remove

包含旧项目的列表,除了已删除的项目 + 新添加的 2 个项目(这里我使用 arrayList.remove 删除香蕉 arrayList.remove(arrayList.get(2));