想要快速回答如何列出我的列表视图中的所有项目,以便打印列表或共享到记事本应用程序等。也就是说,从列表视图中获取包含以下信息的变量:“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);
答案 0 :(得分:7)
你的问题是,
循环浏览列表视图中的所有项目。
我们从您的代码中了解到您要将String array
中的项目添加到ArrayList
。
但是,您可以将String数组作为第三个参数直接传递给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]);
}
在评论部分,你说
我想我可以在
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个项目和一个按钮以加载更多项目。
列出旧的3项+新添加的2项(这里我没有使用arrayList.remove )
列出旧项目,但已删除的项目+新添加的2项目(此处我使用arrayList.remove 删除香蕉arrayList.remove(arrayList.get(2));
)
答案 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));
}
答案 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
作为第三个参数。