我做了我的自定义 ArrayAdapter 以突出显示 ListView 的选定项。代码如下:
public class HeroListViewAdapter extends ArrayAdapter<Hero> {
public static int NO_POS = -1;
private List<Hero> heroes;
private int selected_pos = NO_POS;
public HeroListViewAdapter(Context context, List<Hero> heroes){
super(context, R.layout.hero_list_item_view, heroes);
this.heroes = heroes;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = GuiBuilder.createHeroListItemView(heroes.get(position),getContext(),parent,false);
if(position == selected_pos){
rowView.setBackgroundColor((rowView.getResources().getColor(R.color.list_item_selected_color)));
}
return rowView;
}
public void setSelectedPosition(int selected_pos){
this.selected_pos = selected_pos;
}
public int getSelectedPosition(){
return selected_pos;
}
public Hero getSelectedHero(){
if(selected_pos>=0 && selected_pos<heroes.size())
return this.getItem(selected_pos);
else
return null;
}
}
其中方法修改内部成员以跟踪所选位置,getView 方法测试此内部成员的值,以便通过更改其背景来突出显示该项目。事物的使用方式如下:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
list_adapter.setSelectedPosition(position);
listView.invalidate();
}
});
现在...在我的 2.2.1 Froyo(API 8 级)智能手机上一切正常。但是,当我单击一个项目时,在模拟器(API 16 级)上运行应用程序,背景不会改变。所以问题是:这是 API 问题(以及向后兼容性?)还是模拟器问题?我是否必须担心该应用程序可能无法在我的其他设备上按预期运行。