gpt4 book ai didi

java - 使用接口(interface)实现将线程结果返回给Fragment

转载 作者:行者123 更新时间:2023-12-02 05:53:21 26 4
gpt4 key购买 nike

我有一个应用程序,可以在 fragment 内的 ListView 中显示新闻文章。首次创建 fragment 时,我启动一个线程,通过 API 调用获取文章(故事)列表

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mContext = getActivity();

new GetStoriesThread(mContext,this).start();

Fragment 和 Thread 都实现相同的接口(interface),用于将数据从线程传递到 Fragment

public interface GetStoriesThreadInterface {
public void onGetStoriesThreadResult(final ArrayList<Story> result);
}

Thread处理完成后,会调用接口(interface)方法,将数据传回调用Fragment。

问题

现在,当我通过以下代码在 fragment 中获得结果时:

    @Override
public void onGetStoriesThreadResult(final ArrayList<Story> result)
{
if(result!=null)
{
mStoriesList.clear(); //mStoriesList is the list that i supply to the adapter of the ListView
mStoriesList.addAll(result);
adapter.notifyDataSetChanged(); //Exception here
}
}

我得到以下异常:

04-28 18:03:58.432: E/ViewRootImpl(21513): com.says.news.Stories : Only the original thread that created a view hierarchy can touch its views.

我知道使用 getActivity().runOnUiThread(new Runnable... 可以解决问题,但我不明白为什么。有时 getActivity() 返回 null 和这是一个完全不同的问题。

提前致谢!!

最佳答案

您是否从工作线程中调用 onGetStoriesThreadResult() ?你不应该。考虑使用 AsyncTask<> 而不是裸露的 Thread ,重写 onPostExecute() 方法并从那里调用您的事件。

关于java - 使用接口(interface)实现将线程结果返回给Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23338290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com