我有一个自定义的ArrayAdapter的列表视图。当ArrayAdapter改变了gui应该更新。但是,当它应该更新时,除非您在模拟器上按一个键,否则它不会。可点击的行不可点击,除非我点击了仿真器上的任意按钮。 为ListView底层数据被其他地方改变,然后通知ListView不会更新
public void update(java.util.Observable arg0, Object arg1)
{
Log.e("Supposed","to update");
ad.notifyDataSetChanged(); //Ad is the arrayadapter
}
数据在魔术触摸的按钮后适当地呈现的观察者(在这种情况下,列表视图)。但为什么? 有什么想法? 当我检查ArrayAdapter的项目 - 参考它显示更新的值,但gui不会。 plz帮助
编辑:
private class MustAdapter extends ArrayAdapter<Item>
{
public MustAdapter(Context context, int textViewResourceId, ArrayList<Item> items)
{
super(context,textViewResourceId,items);
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
Item o = items.get(position);
if (o != null) {
TextView tt = (TextView) v.findViewById(R.id.text1);
TextView bt = (TextView) v.findViewById(R.id.text2);
ImageView iv= (ImageView) v.findViewById(R.id.img);
ImageView ib = (ImageView)v.findViewById(R.id.OnOffButt);
if (ib != null) {
ib.setTag(position);
if (((Ventilation)o).enabled ==0) {
ib.setImageResource(android.R.drawable.ic_input_delete);
}
else
ib.setImageResource(android.R.drawable.ic_input_add);
ib.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
int index=((Integer)arg0.getTag()).intValue();
Ventilation v= (Ventilation)items.get(index);
v.enabled=v.enabled != 0 ? 0 : 1;
//ad.notifyDataSetChanged();
DU.toggle(v);
}
});
}
if (iv !=null){
iv.setImageResource(R.drawable.fan);
}
if (tt != null) {
tt.setText(""+((Ventilation)o).actual); }
if(bt != null){
bt.setText(""+((Ventilation)o).setPoint);
}
}
return v;
}
即使当我使用arrayadapter.add(项目),我必须按其他地方为它重新加载
即使arrayadapter.add(Item)需要按任意按钮才能响应更改。 – Raul 2010-06-29 13:32:24
@Raul:不,它没有。见http://github.com/commonsguy/cw-android/tree/master/Threads/Asyncer/和http://github.com/commonsguy/cw-andtutorials/tree/master/04-ListView/ – CommonsWare 2010-06-29 13:58:17
猜猜我的模拟器然后不起作用。我会在几天内尝试Ubuntu的 – Raul 2010-06-30 06:34:58