【问题标题】:Refreshing a Spinner刷新微调器
【发布时间】:2012-03-20 07:21:14
【问题描述】:

我有一个带有微调器的视图。该活动通过一个弹出窗口启动另一个活动,我在其中添加或删除父级在 Spinner 中显示的值。 因此,在 onActivityResult() 中,我通过调用我的 fillSpinner() 方法来刷新 Spinner 的内容,以便它反映任何附加或删除的值。 该方法的参数是之前选择的值:

private void fillSpinner(String value){

    Cursor c =  mDbHelper.getAllCategories();
    startManagingCursor(c);
    c.moveToFirst();

    String[] from = new String[]{DBAdapter.KEY_CATEGORY};       
    SimpleCursorAdapter scCats = new SimpleCursorAdapter(
        this, android.R.layout.simple_spinner_item,c,from,
            new int[]{android.R.id.text1});
    scCats.setDropDownViewResource(
        android.R.layout.simple_spinner_dropdown_item);
    category.setAdapter(scCats);

    if (value != null && value != "") {
        category.setSelection((int)mDbHelper.categoryIndex(value));
    }
}

当我打开 Spinner 时,它包含正确的列表(即已刷新)并且选择了正确的值。但是,Spinner 控件本身(处于关闭状态)不显示所选值,而是显示列表中的第一个值。

当我在调试器中单步执行代码时,Spinner 值在我调用 setSelection() 之前和之后都是正确的(并且始终使用相同的正确 id 调用它)。但是,由于我无法退出事件,所以当我在片刻后恢复执行时,Spinner 中的值会发生变化。

换句话说,当我从弹出活动返回时,微调器的显示字符串已更改并且与所选项目不同。

感谢任何想法。

【问题讨论】:

    标签: android android-activity spinner


    【解决方案1】:

    我找到了解决该问题的简单方法:使用表单 Spinner.setSelection(int position, Boolean NavigateTo) 让 Spinner 显示正确的选定项。

    示例:Spin.setSelection(iPos, true);

    祝你好运。

    【讨论】:

      【解决方案2】:

      我认为这个问题是由于我的光标在每次调用时都会重新创建。我没有更好的解释。 This post 间接为我指明了正确的方向。

      通过在最初创建光标后按住光标,我可以在更改列表数据后调用 requery(),而不是在我的问题中运行该方法。现在可以正常使用了。

      【讨论】:

        猜你喜欢
        • 2012-03-12
        • 2022-08-24
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多