2015-12-15 32 views
1

我试图插入一个项目到多个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(); 
     } 
    }); 
} 

回答

0

你应该调用spinner.setAdapter(adapter);或者在将新值插入适配器之后使用类似的方法?

+0

该项目正确显示在微调器中,我的问题是微调器的选择是通过索引而不是对象引用来设置的。所以我正在想办法为一个可以在同一屏幕上用于许多Spinners的适配器动态地实现这一点。 – BinaryShrub

+0

对不起,请原谅我的无知。 http://stackoverflow.com/questions/11072576/set-selected-item-of-spinner-programmatically。这可能会帮助你。你可以简单地在当前索引处重新加载spinners,在你的情况下可能是index-1。 –

0
spinner.setSelection(list.indexOf("four")); 

这会将选择设置为“4”,而不管它在什么位置。