如何从另一个类填充ListView?

时间:2012-02-01 08:00:43

标签: android listview android-asynctask

我的问题是遵循(我知道我所选课程的选定结构看起来很奇怪,但......)。

  1. 我有内部类的MainActivity,它扩展了AsyncTask来解析来自互联网的HTML。
  2. 此活动解析HTML页面并填充AnotherActivity中的ListView。
  3. AnotherActivity必须调用内部AsyncTask,PostExecute必须通过其他数据填充ListView(此操作的意义是AnotherActivity是搜索结果,另一个搜索意味着转到搜索YouTube结果的新页面)
  4. 我在AsyncTask的PostExecute中编写了下一个代码: 我用ListView获取Activity,创建适配器并将其分配给ListView。

    ResultsQueryActivity resultsActivity = new ResultsQueryActivity();
    ResourceDataAdapter resourceDataAdapter = new ResourceDataAdapter(resultsActivity,MainActivity.listVideosData); resultsActivity.setListAdapter(resourceDataAdapter);

  5. 执行此操作后,我收到消息

    *02-01 07:40:56.784: E/AndroidRuntime(525): java.lang.IllegalStateException: System services not available to Activities before onCreate()*
    

    我真的不知道如何解决它。感谢帮助!

3 个答案:

答案 0 :(得分:1)

为什么你有两个活动,当它们似乎都需要在同一个活动上完成时?

只使用一项活动。解析完成后,使用您的数据更新ListView,然后显示ListView。最初将隐藏ListView。您的其他视图(如果有)也将被隐藏。

或使用ListActivity,并没有真正有所作为。

答案 1 :(得分:0)

我猜它会与您创建ResultsQueryActivity的方式有关...通常您会通过Intent启动它并将所有视频数据传递给它Bundle。尝试使用类似的内容替换postExecute()中的代码(假设您的视频数据是String数组):

Intent intent = new Intent(MainActivity.this, ResultsQueryActivity.class);
intent.putExtra("videodata", MainActivity.listVideosData);
startActivity(intent);

然后在ResultsQueryActivity课程中,您可以使用onCreate(Bundle b)方法检索数据:

Bundle extras = getIntent().getExtras();
String[] videodata = extras.getStringArray("videodata");

答案 2 :(得分:0)

您无法实例化活动,活动由系统管理。

这两项活动的流程并不是很好。

  1. 如果MainActivity仅用于解析html,则它不应该存在。将asynctask放在AnotherActivity中并填写postExecute中的列表。

  2. 如果MainActivity必须存在,那么您不应该在任务中填充数据。尝试将数据解析为AnotherActivity,并让它自己填充数据。