安卓:微调没有更新我的看法时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

回到顶部