我试图插入一个项目到多个Spinners正在使用的适配器。但是,当我插入适配器时,我希望Spinners保留其基于对象而不是位置的原始选择。插入ArrayAdapter不会更新微调器选择
在下面的例子中,Spinner最初选择了“4”,但是当我点击按钮插入“3”时,微调现在设置为“3”而不是更新到“4” 。我怎样才能做到这一点?
public class MyActivity extends Activity {
List list;
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.spinner1);
list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("four");
adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, list);
spinner.setAdapter(adapter);
// set selection to "four"
spinner.setSelection(2);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//list.add(2, "three") causes the same problem
adapter.insert("three", 2);
adapter.notifyDataSetChanged();
}
});
}
该项目正确显示在微调器中,我的问题是微调器的选择是通过索引而不是对象引用来设置的。所以我正在想办法为一个可以在同一屏幕上用于许多Spinners的适配器动态地实现这一点。 – BinaryShrub
对不起,请原谅我的无知。 http://stackoverflow.com/questions/11072576/set-selected-item-of-spinner-programmatically。这可能会帮助你。你可以简单地在当前索引处重新加载spinners,在你的情况下可能是index-1。 –