安卓:微调没有更新我的看法时notifyDataSetChanged()被调用
我尝试更新通过调用notifyDataSetChanged()
微调视图。但它没有更新。下面安卓:微调没有更新我的看法时notifyDataSetChanged()被调用
是我的活动:
public class DisplayArchive2 extends AppCompatActivity { List<String> yearslist;
Spinner spinner;
ArrayAdapter<String> dataAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.archive2);
spinner = (Spinner) findViewById(R.id.year_spinner);
yearslist = new ArrayList<String>();
yearslist.add("2017");
yearslist.add("2016");
yearslist.add("2015");
yearslist.add("2014");
yearslist.add("2013");
dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,yearslist);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
yearslist.clear();
yearslist.add("2010");
yearslist.add("2009");
yearslist.add("2008");
yearslist.add("2007");
yearslist.add("2006");
dataAdapter.notifyDataSetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
年的名单并没有改变在选择任何一年。
它看起来像下面
回答:
试试这个使用dataAdapter2.setNotifyOnChange(true);
其工作的罚款我测试我的设备
void setNotifyOnChange (boolean notifyOnChange)
控制是否该改变
list (add(T)
方法,addAll(Collection)
,addAll(Object[])
,insert(T, int)
,remove(T)
,clear()
,sort(Comparator))
自动调用notifyDataSetChanged()
。如果设置为false,呼叫方必须手动呼叫notifyDataSetChanged()
以使附件视图中反映的更改。默认值为true,并调用notifyDataSetChanged()
将该标志重置为true。
CODE
List<String> yearslist; Spinner spinner;
ArrayAdapter<String> dataAdapter2;
spinner = (Spinner) findViewById(R.id.year_spinner);
yearslist = new ArrayList<String>();
yearslist.add("2017");
yearslist.add("2016");
yearslist.add("2015");
yearslist.add("2014");
yearslist.add("2013");
dataAdapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,yearslist);
dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter2);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (position == 0) {
} else {
yearslist.clear();
yearslist.add("2010");
yearslist.add("2009");
yearslist.add("2008");
yearslist.add("2007");
yearslist.add("2006");
dataAdapter2.setNotifyOnChange(true);
dataAdapter.notifyDataSetChanged();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
回答:
按我的理解。您正在通知onItemSelected()
内的适配器。在Spinner适配器初始化的情况下,onItemSelected()将首次调用一次。因此,您在Spinner中获得的名单永远都是新名单(即2006-2010),而不是第一名(即2013-2017)。
因此,如果您确实通知了适配器上的其他操作,或者可能避免第一次拨打onItemSelected()
,您的代码将正常工作。
以上是 安卓:微调没有更新我的看法时notifyDataSetChanged()被调用 的全部内容, 来源链接: utcz.com/qa/264941.html