还有另一个问题,这个是BAFFLING!
我们走了。
我们有布局......
<?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>
Soo ......这是实际问题。当用户从其图库中选择图像时,它会正确添加到我们的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上的所有editTexts都突然包含Parcelable数组中最后一个UploadObject的标题和描述。同样,我们通过对象的每个追加进行调试,并且对象包含正确的数据。我们感到困惑,需要一些帮助!
答案 0 :(得分:0)
我们得到了它!
不完全确定这里发生了什么,但是我们覆盖(sp?)方法onPostCreate(Bundle)并在此处解析了包,我们的问题得到解决。在onCreate()期间必须有一些关于膨胀xml文件的东西,这会让人感到困惑。
无论如何,如果你必须为XML(常规布局除外)进行膨胀,请在onPostCreate()上进行!