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) {