我有一个arraylist,我想更新特定的项目。我正在使用这一行添加数据列表:
randomsList.add(new Random(result.get(i).getAsJsonObject(),0));
这是将数据添加到0,1,2,3,4 ...位置,所以当我尝试更新项目时,我不知道哪个对象在哪里。
我正在用这一行更新数据:
randomsList.set(position,new Random(user,1));
我认为如果我使用自定义数字作为位置我可以更新特定项目。我的原型:
randomsList.add({USER_ID},new Random(result.get(i).getAsJsonObject(),0));
如果我想更新它,那么我使用这一行:
randomsList.set({USER_ID},new Random(user,1));
这是一个好方法吗?如果答案是否定的,应该怎么做?
P.S。:我正在使用带有适配器的这个arraylist
答案 0 :(得分:0)
正如@itachiuchiha所提到的,你应该使用Map。 "自定义数字"你提到的是你的键(整数),值是Random
对象。
另外,为了回应您的评论,下面是使用Map作为基础数据源的Android Adapter
的示例。
public class RandomsAdapter extends BaseAdapter {
private Map<Integer, Random> randoms;
public RandomsAdapter(Map<Integer, Random> randoms) {
this.randoms = randoms;
}
public void updateRandoms(Map<Integer, Random> randoms) {
this.randoms = randoms;
notifyDataSetChanged();
}
@Override
public int getCount() {
return randoms.size();
}
@Override
public Random getItem(int position) {
return randoms.get(position);
}
@Override
public long getItemId(int position) {
// we won't support stable IDs for this example
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = createNewView();
}
update(view, songs.get(position));
return view;
}
private View createNewView() {
// TODO: create a new instance of your view and return it
return null;
}
private void update(View view, Random random) {
// TODO: update the rest of the view
}
}
请注意updateRandoms(Map<Integer, Random> randoms)
方法。
虽然您可以在适配器中公开一个方法来更新Map中的单个条目,但是适配器不应该负责处理对地图的修改。我更喜欢再次传递整个地图 - 它仍然可以是对同一个对象的引用,但是适配器并不知道或不关心;它只知道:&#34;我的基础数据源已被更改/修改,我需要告诉我的观察者他们应该通过调用notifyDataSetChanged()
&#34;来刷新他们的观点。
或者,您可以在修改基础Map时在外部调用适配器上的notifyDataSetChanged()
(这告诉ListView其数据已过期并再次从适配器请求其视图)。