这是我的主要活动:
adapter.setNotifyOnChange(true);
lv = (ListView) findViewById(R.id.listView1);
lv.setAdapter(adapter);
public void onClick(View view) {
adapter.add(text);
new DoSomethingWithListViewChild(lv, index).execute();
}
这是 AsyncTask DoSomethingWithListViewChild:
public class DoSomethingWithListViewChild extends AsyncTask<Void, Void, Void> {
TextView tv;
public DoSomethingWithListViewChild (ListView lv, int index) {
View v = lv.getChildAt(index - lv.getFirstVisiblePosition());
tv = (TextView) v.findViewById(R.id.textTitle);
}
@Override
protected Void doInBackground(Void... params) {
// Do something with TV
return null;
}
问题是在执行lv
代码时它仍然是空的View v = lv.getChildAt(index - lv.getFirstVisiblePosition());
。
我尝试了一些与锁定对象的同步,但我以死锁或其他错误结束。
我如何等到lv
不为空?
编辑:
好的,我试过这个:
...
ConditionVariable lock = new ConditionVariable(false);
...
public void onClick(View view) {
adapter.add(text);
lock.block();
new DoSomethingWithListViewChild(lv, index).execute();
}
在我的自定义适配器中:
public class MyAdapter extends ArrayAdapter<SpannableString> {
ConditionVariable lock;
public MyAdapter(Context context, int layout_resource_id, ConditionVariable lock) {
...
this.lock = lock;
...
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
lock.open();
return convertView;
}
}
但程序只是挂起。lv
我需要找到打开锁的确切时刻。它显然不在getView
方法中..它甚至没有达到lock.open();