还有一个问题,这一个让人困惑!
我们走吧。
我们有一个布局…
<?xml version="1.0" encoding="utf-8"?>
<!-- Template for creating a result in MediaUpload -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:isScrollContainer="true"
android:focusableInTouchMode="false"
android:focusable="false">
<ImageView android:id="@+id/imgView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="110dp"
android:maxHeight="110dp"
android:minWidth="110dp"
android:minHeight="110dp"
android:layout_gravity="center_vertical"
android:padding="3dp"
android:scaleType="center"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:saveEnabled="true"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<TextView android:id="@+id/img_file_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/LinkText"
android:textStyle="bold"
android:paddingBottom="3dp"/>
<EditText android:id="@+id/img_title"
android:hint="Title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minWidth="150dp"
android:maxHeight="50dp"
android:inputType="textVisiblePassword"
android:maxLength="255"/>
<EditText android:id="@+id/img_desc"
android:hint="Description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minWidth="150dp"
android:maxHeight="50dp"
android:maxLength="255"/>
</LinearLayout>
</LinearLayout>
<ImageView
android:src="@drawable/divider"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:paddingTop="2dp"
android:paddingBottom="2dp">
</ImageView>
</LinearLayout>
我们在这里使用这个作为一个用户可以上传到我们网站的对象的模板。
(这是一个巨大的布局,所以只需发布我们要附加的内容)。
<LinearLayout android:id="@+id/list_of_images"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
苏……这是实际问题。当用户从图库中选择一个图像时,它会正确地添加到我们的线性布局中。现在,我们的一个工作人员一直内存不足,当他拍照或浏览时,应用程序关闭。我们的应用程序设置为在用户离开应用程序进入savedinstancestate方法之前立即保存所有数据(数据为uri、标题文本、描述文本等)。
/*
* The Activity is being recycled and needs to have its instance
* saved before we lost all of the image URis!
*/
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
helper.saveEnteredData();
outState.putParcelableArray(IMAGE_URI_BUNDLE_KEY, helper.getUploadObjectArray());
outState.putParcelable(CAPTURE_IMAGE_URI_BUNDLE_KEY, currentFileURI);
outState.putInt(CURRENT_JOB_BUNDLE_KEY, reportSpinner.getSelectedItemPosition());
ArrayList<ReportInfoParcelable> alReps = new ArrayList<ReportInfoParcelable>();
for(int i = 0; i < reportList.length; ++i)
alReps.add(new ReportInfoParcelable(reportList[i]));
outState.putParcelableArray(JOB_LIST_BUNDLE_KEY, alReps.toArray(new ReportInfoParcelable[alReps.size()]));
}
这是helper.saveentereddata()…
public void saveEnteredData()
{
ViewGroup vg = null;
UploadObject object = null;
String title, desc;
for(int i = 0; i < mLinearLayout.getChildCount(); i++)
{
vg = (ViewGroup) mLinearLayout.getChildAt(i);
object = alUploadObjects.get(i);
title = ((TextView) vg.findViewById(R.id.img_title)).getText().toString();
desc = ((TextView) vg.findViewById(R.id.img_desc)).getText().toString();
object.setTitle(title);
object.setDesc(desc);
}
}
当应用程序在用户离开活动后从崩溃中返回时,当我们在返回时调试应用程序时,返回的UploadObjects数组包含所有正确的URI、标题和描述,但当应用程序最终显示时,我们附加到的LinearLayout上的所有EditText都突然包含上一个的标题和描述。Parcelable数组中的LoadObject。同样,我们通过对象的每个附加进行调试,对象包含正确的数据。我们很困惑,需要帮助!