【问题标题】:Set 2 different list to spinner based on condition根据条件将 2 个不同的列表设置为微调器
【发布时间】:2016-06-27 06:48:07
【问题描述】:

我有 2 个 ArrayList 并想根据条件设置其中一个。但是,它没有被设置。

onCreate() 内部,我根据条件定义了ArrayAdapter 和其中一个列表。第一次它可以工作,但下次当我更新列表并尝试使用notifyDataSetChanged() 再次设置时,它没有工作,并且微调器在 DD 中显示空白列表。

伪代码如下

list1, list2;
flag = True/False;
arraydapter(context, res, flag ? list1 : list2);

refreshList() {
if (flag)
list1.clear();
else
list2.clear();

addDataInList();
}

addDataInList() {
if (flag)
list1.add(something);
else
list2.add(something);

adapter.notifyDataSetChanged();
}

【问题讨论】:

  • Nope by notifyDataSetChanged 方法您不能更改数据列表,当您当前列表中有任何更新时使用此方法,但是当您完全更改列表时,您需要再次设置为适配器listview,或者你只能在 list 上使用,然后更新它并调用 notify 方法
  • 你应该展示你的真实代码,而不是你的伪代码。但是,我已经基于伪代码提出了一个问题:什么时候是“arraydapter(context,res,flag?list1:list2);”执行?一旦进入 onCreate()?因为如果是这种情况,如果没有标记,适配器将是空的。
  • 您是否尝试过创建两个不同的适配器,然后根据您的情况更改适配器?
  • @Vickyexpert 感谢您的解释。

标签: android arraylist android-arrayadapter android-spinner


【解决方案1】:

修改 list1/list2 不会修改您传递给数组适配器的列表。

您必须在调用 notifydatasetchanged() 之前在数组适配器中设置此新数据,否则您需要创建新适配器。

我建议使用一个名为 setData 的函数来替换 arrayadapter 中的列表并调用 notifydatasetchanged。

【讨论】:

    【解决方案2】:

    问题是适配器只设置了一次。由于适配器引用list1list2,所以当flag 翻转时,Spinner 仅包含空白。

    因此,只使用一个列表。我已经相应地修改了你的伪代码:

    list;
    flag = True/False;
    
    onCreate() {
        arraydapter(context, res, list);
    }
    
    refreshList() {
        list.clear();
    
        if (flag)
            list.add(something);      // i.e. list1 contents
        else
            list.add(something_else); // i.e. list2 contents
    
        adapter.notifyDataSetChanged();
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 2022-12-02
      相关资源
      最近更新 更多