有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么需要适配器。add()创建无限循环并崩溃?

我正在制作一个Android应用程序,我的adapter.add()实现似乎使应用程序崩溃。我不得不使用日志标记来发现我的代码奇怪地陷入了循环中。代码如下:

int i =0;
if(cards.size()>0){
    Log.i("KOOL","Checked arraylist size =" + cards.size());
    while(i < cards.size()){
        Log.i("KOOL","Inside while loop");
        adapter.add(cards.get(i));
        i++;
    }
    Log.i("KOOL","Added data to adapter");
    adapter.notifyDataSetChanged();
    Log.i("KOOL","Finished OnActivityResult");
}

应用程序到达日志标记“Inside while loop”并重复该标记,直到应用程序崩溃。我知道cards.size()在while循环之前是2,所以我看不出应用程序崩溃的原因。我是否正确使用了适配器?请帮忙


共 (1) 个答案

  1. # 1 楼答案

    你的问题缺少上下文。幸运的是,我知道您的适配器是ArrayAdapter类型,并且正在使用cards初始化它。循环开始时,cards.size()2。但是然后你add给它一些东西,使cards.size()成为3。然后。。。我想你明白了。您可以通过适配器add或通过列表add向适配器/列表对添加一些内容。如果将其同时添加到这两个值中,则将添加两次

    以下是ArrayAdapter::add的代码:

    public void add(T object) {
        synchronized (mLock) {
            if (mOriginalValues != null) {
                mOriginalValues.add(object);
            } else {
                mObjects.add(object);
            }
        }
        if (mNotifyOnChange) notifyDataSetChanged();
    }
    

    其中mOriginalValues是用于构造适配器的同一列表mObjects是它们的筛选版本