代码之家  ›  专栏  ›  技术社区  ›  cdonner

刷新旋转器

  •  7
  • cdonner  · 技术社区  · 14 年前

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

    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值在我调用setselection()之前和之后都是正确的(并且总是使用相同的正确ID调用它)。但是,由于我无法退出事件,因此当我在短时间后恢复执行时,微调器中的值会发生更改。

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

    任何想法都会受到赞赏。

    2 回复  |  直到 12 年前
        1
  •  5
  •   Fernando Martinez    12 年前

    我找到了一个解决这个问题的简单方法:使用窗体微调器.setselection(int position,boolean navigate)让微调器显示正确的选定项。

    示例:spin.setselection(ipos,true);

    祝你好运。

        2
  •  1
  •   Community paulsm4    7 年前

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

    通过在最初创建后保留光标,我可以在更改列表数据后调用requery(),而不是在我的问题中运行该方法。它现在工作得很好。