可能有一种非常简单的方法,只需要一行或两行代码,但我不知道如何解决这个问题。
我想拥有最初在屏幕中央显示加载gif的片段,然后它会启动一个从我的服务器下载信息的AsyncTask。 AsyncTask完成后,我需要将Fragment的内容视图设置为不同的xml文件,然后显示我从服务器获得的一些内容。
我在想应该有某种类型的函数,比如Fragment.invalidate()
或Fragment.refresh()
,可以帮助更新片段,但我似乎无法找到任何这样的函数。
另外,如果我在onCreateView
函数之外的其他函数中更新Fragment,是否需要创建变量来保存最初传递给的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
*/
}
}
}
注意: ServerResponse是我创建的类,Server.getPosts是一个返回ServerResponse的静态函数。我知道这些都适用于我的情况。我需要在onPostExecute
课程的GetDataTask
部分中获得第1点和第3点的帮助。
谢谢!
答案 0 :(得分:0)
您可以使用 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();
答案 1 :(得分:0)
三件事:
setRetainInstance(true)
以防止片段在旋转时被破坏。 (只是要小心处理分离状态)getActivity().findViewById(android.R.id.content)
来获取活动的根视图,然后根据需要对其进行操作。您也可以创建一个具有两种状态的布局,并显示/隐藏它们所需的部分。LayoutInflater.from(getActivity())