diff --git a/app/src/org/commcare/fragments/EntitySubnodeDetailFragment.java b/app/src/org/commcare/fragments/EntitySubnodeDetailFragment.java
index 6c1b88c8e3..9a3b317086 100755
--- a/app/src/org/commcare/fragments/EntitySubnodeDetailFragment.java
+++ b/app/src/org/commcare/fragments/EntitySubnodeDetailFragment.java
@@ -2,6 +2,7 @@
import android.app.Activity;
import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -22,6 +23,8 @@
import java.util.List;
+import androidx.annotation.Nullable;
+
/**
* Created by jschweers on 8/26/2015.
*
@@ -35,6 +38,12 @@ public class EntitySubnodeDetailFragment extends EntityDetailFragment implements
public EntitySubnodeDetailFragment() {
}
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setRetainInstance(true);
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (savedInstanceState != null) {
@@ -65,6 +74,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
headerLayout.removeAllViews();
headerLayout.addView(headerView);
headerLayout.setVisibility(View.VISIBLE);
+ } else if (adapter != null) {
+ listView.setAdapter((ListAdapter)adapter);
}
return rootView;
@@ -79,20 +90,22 @@ public void attachLoader(EntityLoaderTask task) {
public void deliverLoadResult(List> entities,
List references,
NodeEntityFactory factory, int focusTargetIndex) {
- Bundle args = getArguments();
- Detail detail = asw.getSession().getDetail(args.getString(DETAIL_ID));
- final int thisIndex = args.getInt(CHILD_DETAIL_INDEX, -1);
- final boolean detailCompound = thisIndex != -1;
- if (detailCompound) {
- detail = getChildDetailForDisplay(detail, thisIndex);
- }
+ if(isVisible()) { // underlying session might have changed otherwise and can cause xpath eval errors
+ Bundle args = getArguments();
+ Detail detail = asw.getSession().getDetail(args.getString(DETAIL_ID));
+ final int thisIndex = args.getInt(CHILD_DETAIL_INDEX, -1);
+ final boolean detailCompound = thisIndex != -1;
+ if (detailCompound) {
+ detail = getChildDetailForDisplay(detail, thisIndex);
+ }
- this.loader = null;
- this.adapter = new EntitySubnodeDetailAdapter(getActivity(), detail, references,
- entities, modifier, factory);
- this.listView.setAdapter((ListAdapter)this.adapter);
- if (focusTargetIndex != -1) {
- listView.setSelection(focusTargetIndex);
+ this.loader = null;
+ this.adapter = new EntitySubnodeDetailAdapter(getActivity(), detail, references,
+ entities, modifier, factory);
+ this.listView.setAdapter((ListAdapter)this.adapter);
+ if (focusTargetIndex != -1) {
+ listView.setSelection(focusTargetIndex);
+ }
}
}
diff --git a/app/src/org/commcare/views/TabbedDetailView.java b/app/src/org/commcare/views/TabbedDetailView.java
index 5cda5c8cd2..dcca4aec46 100755
--- a/app/src/org/commcare/views/TabbedDetailView.java
+++ b/app/src/org/commcare/views/TabbedDetailView.java
@@ -73,11 +73,9 @@ public void setRoot(ViewGroup root) {
mMenu = root.findViewById(R.id.tabbed_detail_menu);
mViewPager = root.findViewById(R.id.tabbed_detail_pager);
- mViewPager.setId(AndroidUtil.generateViewId());
-
mViewPageTabStrip = root.findViewById(R.id.pager_tab_strip);
- mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {