Fix some problems with moving in and out of detached state.
Loaders were not being re-initialized correctly when coming back
(this would also impact the back stack). The ListView also wasn't
working correctly, and there were also problems with simply
re-using a Fragment instance after it had been removed.
Change-Id: I534b091ae09c0ef7ffffe9d68049e6840e8926b3
diff --git a/core/java/android/app/ListFragment.java b/core/java/android/app/ListFragment.java
index a5ee26c..dc8420e 100644
--- a/core/java/android/app/ListFragment.java
+++ b/core/java/android/app/ListFragment.java
@@ -167,7 +167,7 @@
TextView mStandardEmptyView;
View mProgressContainer;
View mListContainer;
- boolean mSetEmptyText;
+ CharSequence mEmptyText;
boolean mListShown;
public ListFragment() {
@@ -210,6 +210,9 @@
public void onDestroyView() {
mHandler.removeCallbacks(mRequestFocus);
mList = null;
+ mListShown = false;
+ mEmptyView = mProgressContainer = mListContainer = null;
+ mStandardEmptyView = null;
super.onDestroyView();
}
@@ -289,10 +292,10 @@
throw new IllegalStateException("Can't be used with a custom content view");
}
mStandardEmptyView.setText(text);
- if (!mSetEmptyText) {
+ if (mEmptyText == null) {
mList.setEmptyView(mStandardEmptyView);
- mSetEmptyText = true;
}
+ mEmptyText = text;
}
/**
@@ -346,6 +349,9 @@
getActivity(), android.R.anim.fade_out));
mListContainer.startAnimation(AnimationUtils.loadAnimation(
getActivity(), android.R.anim.fade_in));
+ } else {
+ mProgressContainer.clearAnimation();
+ mListContainer.clearAnimation();
}
mProgressContainer.setVisibility(View.GONE);
mListContainer.setVisibility(View.VISIBLE);
@@ -355,6 +361,9 @@
getActivity(), android.R.anim.fade_in));
mListContainer.startAnimation(AnimationUtils.loadAnimation(
getActivity(), android.R.anim.fade_out));
+ } else {
+ mProgressContainer.clearAnimation();
+ mListContainer.clearAnimation();
}
mProgressContainer.setVisibility(View.VISIBLE);
mListContainer.setVisibility(View.GONE);
@@ -383,6 +392,8 @@
com.android.internal.R.id.internalEmpty);
if (mStandardEmptyView == null) {
mEmptyView = root.findViewById(android.R.id.empty);
+ } else {
+ mStandardEmptyView.setVisibility(View.GONE);
}
mProgressContainer = root.findViewById(com.android.internal.R.id.progressContainer);
mListContainer = root.findViewById(com.android.internal.R.id.listContainer);
@@ -400,12 +411,17 @@
}
if (mEmptyView != null) {
mList.setEmptyView(mEmptyView);
+ } else if (mEmptyText != null) {
+ mStandardEmptyView.setText(mEmptyText);
+ mList.setEmptyView(mStandardEmptyView);
}
}
mListShown = true;
mList.setOnItemClickListener(mOnClickListener);
if (mAdapter != null) {
- setListAdapter(mAdapter);
+ ListAdapter adapter = mAdapter;
+ mAdapter = null;
+ setListAdapter(adapter);
} else {
// We are starting without an adapter, so assume we won't
// have our data right away and start with the progress indicator.