我做了我的自定義ArrayAdapter來突出顯示ListView的選定項目。 的代碼如下: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問題(和向後兼容?)或一個模擬器?我是否必須擔心該應用程序可能無法在我的其他設備上按預期工作。
是啊謝謝你的答案...我只是想通了... notifyDataSetChanged的作品! –