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