你的问题是,
遍历列表视图中的所有项目。
我从您的代码中了解到您希望将项目从 String array 添加到 ArrayList。
但是,您可以将字符串数组作为第三个参数直接传递给您的ArrayAdapter。
查看 Android Studio 为ArrayAdapter 提供的建议。你也可以通过String[] 或ArrayList :
您可以将 String[] 传递给 ArrayList,或者如果您想将所有 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中传递item的位置来删除item,
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)); 的香蕉)