我认为我的应用程序中发生的事情的说明最适合这个问题。
用户登录后,他们将被带到 MainActivity。这包含一个ActionBar
带有选项卡的选项卡,默认情况下会选择一个选项卡并且用户会看到....
container1 container2
CompanyName: <EditText> | |
ProjectName: <EditText> | Welcome |
<SearchButton> | |
当用户填写这些表格并单击他们看到的搜索按钮时......
container1 container2
<ListView> | |
BasicInfo | Welcome |
Assessment | |
Signature | |
当用户单击“评估”时,他们会看到
container1 container2
<ListView> | Question#1 |
BasicInfo | Question#2 |
Assessment | Question#3 |
Signature | Question#4 |
现在,当评估fragment
膨胀时,它会执行并为来自 的问题AsyncTask
创建。现在,当用户在此屏幕上时,我不希望更改屏幕方向来再次执行网络请求。所以我把像这样的评估Views
JSON
AsyncTask
setRetainInstance(true);
Fragment
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_assessment, container, false);
ab = getActivity().getActionBar();
infoList = new ArrayList<HashMap<String, String>>();
allRadio = new ArrayList<RadioGroup>();
allImageButton = new ArrayList<ImageButton>();
allSpinner = new ArrayList<Spinner>();
allEdit = new ArrayList<EditText>();
allCheck = new ArrayList<CheckBox>();
new Load().execute();
setRetainInstance(true);
return view;
}
然而,当我在评估中翻转屏幕时,Fragment
它不仅不会保存布局,还会将我返回给Activity
看起来像这样的父级
container1 container2
CompanyName: <EditText> | |
ProjectName: <EditText> | Welcome |
<SearchButton> | |
不知道我做错了什么。可能是我fragment
的 inXML
命名不正确,或者容器命名不正确。这里有代码。
容器 XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/MainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/header_fragment_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.2"
android:background="@drawable/green_gradient"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
android:id="@+id/content_fragment_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:background="@drawable/twoglobe_line"
android:orientation="vertical"
android:scrollbars="vertical" >
</LinearLayout>
</LinearLayout>
评估片段 XML
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/basic_info_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/twoglobe_line"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/gen_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="10dp"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
</ScrollView>
那么我是在期待一个不切实际的结果setRetainInstance(true);
还是我做错了?任何帮助表示赞赏。