【发布时间】:2015-10-07 17:13:20
【问题描述】:
我有一个包含两个片段(片段 A 和片段 B)的主活动。 一次只能显示一个片段。 两个 Fragment 都包含一个 ListView(Frag A 和 Frag B 通用)。
1.创建Activity时Frag A通过AsyncTask加载其所有值
2.当我按下按钮时,我会切换到执行相同过程的 Frag B
3.再次按下按钮我切换到 Frag A 并再次调用 AsyncTask
我不想执行第三步,而是只想保存Frag A的实例,所以内容没有再次加载。我该怎么做?
我知道我将不得不再次停止调用 AsyncTask,这将得到处理。非常感谢任何有关保存实例状态的帮助。
public class DepositFragement extends Fragment {
ProgressDialog pDialog;
private String TAG="DEPOSITS FRAGMENT";
PrefManager pref;
ListView depList;
ListView depoList;
Boolean isFirstTime=true;
Parcelable depoListInstance;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setRetainInstance(true);
return inflater.inflate(R.layout.deposits_fragment,container,false);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("Depo Instance", depoList.onSaveInstanceState());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState!=null)
{
depoListInstance = savedInstanceState.getParcelable("Depo Instance");
depoList.onRestoreInstanceState(depoListInstance);
}
depoList=(ListView)getActivity().findViewById(R.id.lvDepositList);
if(isNetworkAvailable())
{
if(isFirstTime) {
new LoadDeposits().execute();
isFirstTime = false;
}
}
else {
AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
alertDialog.setTitle("Info");
alertDialog.setMessage("Internet not available, Cross check your internet connectivity and try again");
alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
}
}
【问题讨论】:
-
如果人们有一些相关的代码要处理,他们会更容易帮助您 - 请向我们展示您到目前为止所做的尝试
-
假设您正在进行片段替换,每次都可以从本地缓存中加载片段数据。关键是您是否在任何地方缓存列表值?如果没有,您可能需要考虑缓存它,然后使用该值在 FragA 上加载您的列表
标签: android android-fragments android-asynctask