Android 重画安卓旋转器

Android 重画安卓旋转器,android,selection,android-spinner,Android,Selection,Android Spinner,我有一个android spinner项目,其中的行由一个TextView和一个ImageView组成(一个星形,用于标记用户已将特定项目标记为收藏夹)。现在,当用户喜欢某个项目时,我希望在微调器列表中使星形显示在该项目旁边,因此我希望重新绘制微调器以显示更新的图像。我该怎么做 我现在要做的是创建一个全新的微调器,带有适当的图像。这使我的微调器将所选项目设置为列表中的第一个项目,这很烦人-我希望它保持不变。我试过了 spinner.setSelection(selectedItem); 这适用

我有一个android spinner项目,其中的行由一个TextView和一个ImageView组成(一个星形,用于标记用户已将特定项目标记为收藏夹)。现在,当用户喜欢某个项目时,我希望在微调器列表中使星形显示在该项目旁边,因此我希望重新绘制微调器以显示更新的图像。我该怎么做

我现在要做的是创建一个全新的微调器,带有适当的图像。这使我的微调器将所选项目设置为列表中的第一个项目,这很烦人-我希望它保持不变。我试过了

spinner.setSelection(selectedItem);
这适用于除我实际需要的数字(当前选定项目的位置)以外的任何数字,然后它会再次将选定微调器项目设置为列表中的第一个

因此:如何使用更新的信息重新绘制列表而不必重新创建整个列表,或者,如何重新创建列表并仍然保留微调器项选择

澄清一下:以下是我正在做的

// Callback for "favourite"-button
star.setOnClickListener(new ImageButton.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // Toggle favourite
            getActiveSelection().setStarred(getActiveSelection().isStarred() ? false : true);
            reloadText();
            createSpinner();
        }
    });

 private void createSpinner() {

    spinner = ((Spinner)findViewById(R.id.spinner));

    ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
    HashMap<String, Object> map = new HashMap<String, Object>();

    // Populate spinner item list
    for(int i=0; i<N; i++) {
        SpinnerItem item = getSpinnerItem(i);
        map = new HashMap<String, Object>();
        map.put("Name", item.getName());
        map.put("Icon", (item.isStarred() ? "On" : "Off"));
        list.add(map);
    }        

    MySpinnerAdapter aspn = new MySpinnerAdapter(this, list,
            R.layout.spinner, new String[] { "Name", "Icon" },
            new int[] { R.id.spinnerrow, R.id.spinnerrowicon });


    spinner.setAdapter(aspn);
    spinner.setSelection(getActiveSelection().getSpinnerPosition());
}
//对“收藏夹”按钮的回调
star.setOnClickListener(新建ImageButton.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//切换收藏夹
getActiveSelection().setStarred(getActiveSelection().isStarred()?false:true);
重新加载文本();
createSpinner();
}
});
私有void createSpinner(){
微调器=((微调器)findViewById(R.id.spinner));
ArrayList=新建ArrayList();
HashMap=newHashMap();
//填充微调器项列表

对于(int i=0;i您可以只更新
微调器
适配器
-当用户单击星形图标(star.
setOnClickListener
..)时,让它知道哪个项目是星形的。我会做什么:

  • 在适配器构造中,只传递“Name”字段列表,不需要图标(默认情况下,所有字段都不带星号)
  • 您可以向适配器添加单独的函数来设置带星号的项
    (setStarred(字符串名称))
  • 初始调用时,调用
    setStarred
    设置初始选择(如果有)
  • 在star.
    setOnClickListener
    实现中,为适配器上的带星号的项调用
    setStarred
    ,您可以通过
    (MySpinnerAdapter)spinner.getAdapter()

  • 您可以只更新
    微调器
    适配器
    -当用户单击星形图标(星形。
    setOnClickListener
    …)时,让它知道哪个项目是星形的。我会做什么:

  • 在适配器构造中,只传递“Name”字段列表,不需要图标(默认情况下,所有字段都不带星号)
  • 您可以向适配器添加单独的函数来设置带星号的项
    (setStarred(字符串名称))
  • 初始调用时,调用
    setStarred
    设置初始选择(如果有)
  • 在star.
    setOnClickListener
    实现中,为适配器上的带星号的项调用
    setStarred
    ,您可以通过
    (MySpinnerAdapter)spinner.getAdapter()
  • 或者试试:

    spinner.setSelection(getActiveSelection().getSpinnerPosition(),true);
    
    这对我更新微调器很有用…

    或者试试:

    spinner.setSelection(getActiveSelection().getSpinnerPosition(),true);
    

    这对我更新微调器很有效…

    当数据发生更改时,需要在微调器适配器上调用
    notifyDataSetChanged()

    当数据发生更改时,需要在微调器适配器上调用
    notifyDataSetChanged()