Android中的Spinner存在问题。从下拉列表中选择项目将在下次打开时调整该下拉列表的偏移量。因此,例如,如果我在500项下拉列表中选择项目100,则下次打开下拉列表时,项目100将位于列表的顶部。这是我想要的行为。
当我将选择器功能与调用setSelection(int)
结合使用时似乎存在问题。通过以下步骤,我似乎打破了下拉式微调器上的偏移系统。
setSelection(int)
。我已经看过Spinner和AdapterView中的代码,但我看不到任何我错过的公共电话。这是Spinner中的错误还是我的代码中的错误?
答案 0 :(得分:1)
我认为您可以通过将List发送到适配器来解决这个问题。选择项目后,对List进行排序,然后使用适配器的notifyDataSetChanged()函数。当您调用setSelection(int)函数时,再次对List进行排序并使用notifyDataSetChanged()函数。
答案 1 :(得分:1)
你试过public void setSelection (int position, boolean animate)
吗?我没有尝试过,但我认为传递true
作为第二个参数应该使列表滚动到所选位置。另一种方法是计算滚动偏移(项目高度x所选项目位置)并调用setDropDownVerticalOffset
。
更新:我尝试修改API演示中的Spinner示例以使用setSelection(7, true)
,并且在按照您在问题中提供的4个步骤时似乎有效。我刚刚添加了一个Handler并修改了showToast
,如下所示:
private final Handler handler = new Handler();
void showToast(CharSequence msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
handler.postDelayed(new Runnable(){
public void run() {
Toast.makeText(Spinner1.this, "auto setting", Toast.LENGTH_SHORT).show();
Spinner s2 = (Spinner) findViewById(R.id.spinner2);
s2.setSelection(7, true);
}
}, 5000);
}
我测试如下: