Java 如何在Android中完成异步任务后更新片段?
可能有一种非常简单的方法可以做到这一点,它只需要一两行代码,但我不知道如何做到这一点 我想让片段最初在屏幕中央显示加载gif,然后它将启动一个异步任务,从我的服务器下载信息。异步任务完成后,我需要将片段的内容视图设置为不同的xml文件,然后显示从服务器获得的一些内容 我想应该有一些函数类型,比如Java 如何在Android中完成异步任务后更新片段?,java,android,android-fragments,Java,Android,Android Fragments,可能有一种非常简单的方法可以做到这一点,它只需要一两行代码,但我不知道如何做到这一点 我想让片段最初在屏幕中央显示加载gif,然后它将启动一个异步任务,从我的服务器下载信息。异步任务完成后,我需要将片段的内容视图设置为不同的xml文件,然后显示从服务器获得的一些内容 我想应该有一些函数类型,比如Fragment.invalidate()或Fragment.refresh(),可以帮助更新片段,但我似乎找不到任何这样的函数 此外,如果我在onCreateView函数之外的其他函数中更新片段,我是否
Fragment.invalidate()
或Fragment.refresh()
,可以帮助更新片段,但我似乎找不到任何这样的函数
此外,如果我在onCreateView
函数之外的其他函数中更新片段,我是否需要创建变量来保存最初传递给它的LayoutInflater
和ViewGroup
对象,或者我可以使用函数调用访问这些对象?下面是我大致想要做的
public class HomeFragment extends Fragment
{
public HomeFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.loading, container, false);
(new GetDataTask()).execute(1);
return view;
}
private class GetDataTask extends AsyncTask<Integer, Void, ServerResponse>
{
@Override
protected void onPreExecute(){}
@Override
protected ServerResponse doInBackground(Integer... args)
{
int page_num = args[0];
return Server.getPosts(page_num);
}
@Override
protected void onPostExecute(ServerResponse result)
{
/*
1. Update the content view to R.layout.multi_post_list
2. Change specific text views and image views (I know how to do this part)
3. Notify that changes have been made to the Fragment, so it needs redrawn
*/
}
}
}
公共类HomeFragment扩展了片段
{
公共HomeFragment(){}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图=充气机。充气(右布局。装载,容器,假);
(新建GetDataTask())。执行(1);
返回视图;
}
私有类GetDataTask扩展了AsyncTask
{
@凌驾
受保护的void onPreExecute(){}
@凌驾
受保护的ServerResponse doInBackground(整数…参数)
{
int page_num=args[0];
return Server.getPosts(页码);
}
@凌驾
受保护的void onPostExecute(服务器响应结果)
{
/*
1.将内容视图更新为R.layout.multi_post_列表
2.更改特定的文本视图和图像视图(我知道如何执行此部分)
3.通知已对片段进行了更改,因此需要重新绘制
*/
}
}
}
注意:ServerResponse是我创建的一个类,Server.getPosts是一个返回ServerResponse的静态函数。我知道这些在我的情况下是有效的。我需要关于我的onPostExecute
类的GetDataTask
部分中的第1点和第3点的帮助
谢谢 您可以使用findFragmentByTag
DetailsFragment df = getFragmentManager().findFragmentByTag("details");
if (df != null) {
df.setShownIndex(getSelectedIndex());
} else {
df = DetailsFragment.newInstance(getSelectedIndex());
}
fragmentTransaction.replace(R.id.frame, df, "details").commit();
三件事:
setRetainInstance(true)
,以防止片段在旋转时被破坏。(小心处理分离状态)getActivity().findviewbyd(android.R.id.content)
获取活动的根视图,并根据需要对其进行操作。您也可以只创建一个布局,其中包含状态和显示/隐藏它们所需的部分LayoutInflater.from来获取充气机。
不确定此
getSelectedIndex()
来自何处?在Fragment.java中没有类似的方法