Arraylist自定义位置

时间:2014-09-07 21:59:08

标签: java android arraylist

我有一个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

1 个答案:

答案 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其数据已过期并再次从适配器请求其视图)。