-1

这是我的主要活动:

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();

4

1 回答 1

0

可能需要打电话adapter.notifyDayaSetChanged()adapter.add(text)

于 2013-08-01T12:26:23.337 回答