【问题标题】:Inserting into ArrayAdapter does not update Spinner selection插入 ArrayAdapter 不会更新 Spinner 选择
【发布时间】:2016-03-20 16:28:36
【问题描述】:

我正在尝试将一个项目插入到多个 Spinner 正在使用的适配器中。但是,当我插入适配器时,我希望 Spinners 根据对象而不是位置保留其原始选择。

在下面的例子中,微调器最初选择“四”,但是当我单击按钮插入“三”时,微调器现在设置为“三”,而不是更新到“四”的新位置。我怎样才能做到这一点?

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();
        }
    });
}

【问题讨论】:

    标签: android arraylist view spinner android-arrayadapter


    【解决方案1】:

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

    【讨论】:

    • 该项目正确显示在微调器中,我的问题是微调器选择是由索引而不是对象引用设置的。因此,我正在尝试为可用于同一屏幕上的多个 Spinner 的适配器动态地执行此操作。
    • 对不起,原谅我的无知。 stackoverflow.com/questions/11072576/… 。这可能会对您有所帮助。您可以简单地在当前索引处重新加载微调器,在您的情况下可能是 index-1。
    【解决方案2】:
    spinner.setSelection(list.indexOf("four"));
    

    这会将选择设置为“四”,无论它在什么位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 2016-05-19
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多