我有一个带有自定义ArrayAdapter的列表视图。当ArrayAdapter中的更改时,gui应该更新。但是,当它应该更新时,除非你按下模拟器上的一个键,否则它不会被更新。除非我单击模拟器上的任意按钮,否则可点击的行不可点击。 列表视图的基础数据在其他地方更改,然后通知观察者(在这种情况下为listview)
public void update(java.util.Observable arg0, Object arg1)
{
Log.e("Supposed","to update");
ad.notifyDataSetChanged(); //Ad is the arrayadapter
}
按钮上的魔力触摸后,数据会正确显示。但为什么? 有什么想法吗? 当我检查ArrayAdapter的items-reference时,它会显示更新的值,但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(item),我也要按其他地方重新加载
答案 0 :(得分:0)
当ArrayAdapter中有。时 改变了gui应该更新。
如果愿意,如果您通过ArrayAdapter
,add()
或insert()
更改了remove()
的数据。如果您以其他方式更改数据,ArrayAdapter
将无法了解更改。
答案 1 :(得分:0)
好的,所以事情是没有线程,但gui线程可以更新gui线程。 所以我所做的是在onCreate事件中声明一个Handler。
h= new Handler(){
@Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
case 0:
ad.notifyDataSetChanged();
}
}
};
并在我的public void update(java.util.Observable arg0, Object arg1)
我把
Message ms= new Message();
ms.what=0;
h.sendMessage(ms);
多数民众赞成!希望这个对某人来说很方便。