我有一系列不断更新的联系人。我希望我的ListView
更新我的联系人。
我应该使用Adapter
吗?我无法在线找到有关Adapter
的大量信息,那么如何确保我的listview始终包含Array
的内容? (我一直在研究这个4个半小时!)
例如,如果我有一个包含内容"apple"
和"orange"
的数组,那么我的列表也应该说"apple"
和"orange"
。
如果我选择删除"apple"
,那么我的列表应该只是"orange"
。基本上,我的列表应该始终与我的数组相同。
我看到了this,但接下来我将如何删除并添加更多项目到我的列表中?
答案 0 :(得分:1)
创建一个像这样的ListAdapter。
[]
现在进入您的活动
public class MyListAdapter extends BaseAdapter {
private ArrayList<String> names = new ArrayList();
@Override
public int getCount() {
return names.length;
}
@Override
public Object getItem(int location) {
return names[location];
}
@Override
public long getItemId(int position) {
return position;
}
private static class ViewHolder {
public TextView listViewNgoName, listViewDistance, listViewRating, listViewAbout, ngoIcon;
}
public MyListAdapter(
ArrayList names) {
this.names = names;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
// Write code for instantiating a row based view.
return convertView;
}
}
假设您需要在按钮单击时更新列表视图。即。在按钮上单击数组中的值将更改,并且您想要更新listView。
ArrayList<String> names = new ArrayList();
names.add("oranges");
names.add("apple");
ListView listView = (ListView) findViewById(R.id.listview);
MyListAdapter adapter = new MyListAdapter(names);
listView.setAdapter(adapter);
我没有写完整个代码。对你来说只是一个良好的开端。
答案 1 :(得分:0)
所以,您必须通知ListView适配器数据已更改。
listViewAdapater.notifyDataSetChanged();
希望,这会起作用
答案 2 :(得分:0)
我建议使用 ArrayList ,而不是数组。
ArrayList over Array的优点是数组需要固定大小。所以如果你正在初始化一个数组
String names[] = new String[10];
大小为10,当你设置为ListView时,ListView将显示10个列表,即使名称只有8个数组位置
如果你使用ArrayList,你不必担心大小,因为它可以向上和向下扩展
List<String> names = new ArrayList<>();
names.add("Raul");
names.add("Khan");
names.remove(1);
add()将一个项目添加到列表中,而remove()删除一个项目。
关于你的回答,假设你有一个项目的ArrayList
当你有一个要添加到列表中的新项目时,只需使用add()方法将其添加到ArrayList,最后在 ArrayAdapter上调用 notifyDataSetChanged()。 /强>
是的,您必须使用像这样的ArrayAdapter
ArrayList<String> namesList = new ArrayList<>();
ArrayAdapter arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, namesList);
当您对列表进行更改时,即向列表中添加项目时,请在arrayAdapter上调用 notifyDataSetChanged()。
答案 3 :(得分:0)
使用ArrayList
代替Array[]
,您无需初始化ArrayList
的大小,因此它比Array[]
更灵活。如果您在{/ 1}}或add
项内
答案 4 :(得分:0)
我的setData(List<whatever> data)
通常有一个名为Adapter
的方法。我的Adapter
可以在Activity
中说出来。在我的活动中,我从任何地方获取更新的数组,我使用包含更新数组的新数组调用setData()
。
在我的适配器中,我有一个字段定义为:private List<Whatever> mItems
。我在getCount()
的{{1}}方法中使用此字段来获取列表项,基本上我使用此列表填充Adapter
。
我在ListView
中执行的操作是将setdata()
分配给data
,然后调用mItems
来刷新notifyDataSetchanged()
,这次它会使用新的ListView
设置数据值,所以一切都更新到适当的状态。
<强>更新强>
我无法快速访问ListView
的适配器,但下面的适配器应该是ViewPager
,但原则是相同的:< / p>
public class AdapterTweets extends PagerAdapter {
private List<Tweet> mItems;
// [...]
@Override
public int getCount() {
return mItems == null ? 0 : mItems.size();
}
// [...]
public void setData(List<Tweet> items) {
mItems = items;
notifyDataSetChanged();
}
}