2012-02-25 37 views
3

我有一个自定义适配器显示数据库中的对象的微调器。 当对象列表发生变化时,我使用列表创建一个新适配器并将其应用于微调器。之后,第一个项目被选中,所以我试过这个:如何正确动态更新微调器?

// 5th item selected 
int pos = spinner.getSelectedItemPosition(); 
spinner.setAdapter(newAdapter); 
// 0th item selected 
spinner.setSelectedItem(pos); 
// 5th item is selected 

但是GUI仍然显示第一项?

spinner.invalidate()没有帮助。

这是实现我想要的正确方法吗?我真的无法找到有关此行为的任何信息。

+0

你试过adapter.notifyDataSetChanged(); – Vikram 2012-02-25 11:00:44

回答

1

解决:我猜主要问题是自定义微调器适配器。这现在工作正常

if (spinner.getCount() > 0) { 
    pos = spinner.getSelectedItemPosition(); 
} 
MySpinnerAdapter adapter = new MySpinnerAdapter(context, myNewObjects); 
spinner.setAdapter(adapter); 
spinner.setSelection(pos); // needed 
adapter.notifyDataSetChanged(); 
1
spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 

      spinner.setSelectedItem(5); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
+0

这看起来很脏,似乎不工作。 – user376244 2012-02-25 11:13:38

+0

嗯肮脏,,,它的作品为我的每一次,在我的代码无处不在。 – 2012-02-25 11:16:08

0

没有ü尝试notifydatasetChanged()或适配器的notifydatasetInvalidate梅索德。 newAdapter.notifydatasetChanged()

+0

是的,没有变化。 – user376244 2012-02-25 18:24:11

+0

你可以告诉我如何创建mAdapter。 我的意思是mAdapter = new ArrayAdapter (blah blah); ?? – Pankaj 2012-02-26 13:06:11

+0

您不必分配新的适配器。 U将数据添加到适配器中使用的列表中,并调用NotifyDataSetChanged()方法。没有新的适配器。 – Pankaj 2012-02-26 13:11:58