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));
}
因为您的代码中已经有一个数组和一个数组列表,所以应该很容易。
但是如果你想稍后循环并且你只有你的列表视图,我相信你的列表视图中有一个用于适配器的 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 array
到 ArrayList
的项目。
但是,您可以将字符串数组作为第三个参数直接传递给您的 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));
)
想要快速回答如何在我的列表视图中列出所有项目,以便打印列表或共享到记事本应用程序等。也就是说,从列表视图中获取包含以下信息的变量:"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));
}
因为您的代码中已经有一个数组和一个数组列表,所以应该很容易。
但是如果你想稍后循环并且你只有你的列表视图,我相信你的列表视图中有一个用于适配器的 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 array
到 ArrayList
的项目。
但是,您可以将字符串数组作为第三个参数直接传递给您的 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));
)