使用来自其他类/活动的适配器

时间:2012-01-11 08:20:33

标签: java android

如何从其他活动中使用ArrayAdapter?我尝试在MyListActivity.onCreate()中执行以下操作:

setListAdapter(SomeOtherActivity.myAdapter);

在SomeOtherActivity中定义并初始化myAdapter。但是,我得到一个空列表,即使我通过调用确认SomeOtherActivity.myAdapter是完全填充的:

SomeOtherActivity.myAdapter.getCount();

如果我使用setListAdapter(myLocalAdapter)在MyListActivity中定义和初始化我自己的适配器,它就可以工作。一旦我将它切换到setListAdapter(SomeOtherActivity.myAdapter),我得到一个空列表。我调试了它,发现甚至没有调用适配器的getView()。

请帮忙吗?感谢。

在MainActivity.onCreate()

listIsDone = false;
myList = new ArrayList<ItemInfo>();
init = new Runnable() {
  public void run() {
    myList = generate(); // generate the list, takes a while
    Collections.sort(myList, new CustomComparator()); // sorts the list
    myAdapter = new MyInfoAdapter(MainActivity.this, R.layout.row, myList);
    synchronized(this) {
      listIsDone = true;
      notifyAll();
    }
  }
};
Thread thread = new Thread(null, init, "Background");
thread.start;

在我的SubActivity.onCreate()

setListAdapter(MainActivity.myAdapter);
doStuff = new Runnable() {
  public void run() {
    synchronized(MainActivity.init) {
      if (!MainActivity.getListDone()) {
        try {
          MainActivity.init.wait(); // wait for list/adapter to be initialized
        } catch (InterruptedException e) {
        }
      }
    }
  }
};
Thread thread = new Thread(null, doStuff, "Background");
thread.start();

我注意到我无法在Runnable线程中运行myAdapter.notifyDataSetChanged()(我得到运行时错误),但如果我使用runOnUiThread()运行它,我可以在runnable中执行;我猜测对适配器的所有方法调用都需要在同一个UI线程中完成?

1 个答案:

答案 0 :(得分:0)

请在currentActivity中检查myAdapter的可访问性。 在初始化之前,您似乎正在使用适配器。

@share代码......以获得正确的解决方案