动态追加视图和崩溃

时间:2010-08-13 15:54:46

标签: android dynamic views

还有另一个问题,这个是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的标题和描述。同样,我们通过对象的每个追加进行调试,并且对象包含正确的数据。我们感到困惑,需要一些帮助!

1 个答案:

答案 0 :(得分:0)

我们得到了它!

不完全确定这里发生了什么,但是我们覆盖(sp?)方法onPostCreate(Bundle)并在此处解析了包,我们的问题得到解决。在onCreate()期间必须有一些关于膨胀xml文件的东西,这会让人感到困惑。

无论如何,如果你必须为XML(常规布局除外)进行膨胀,请在onPostCreate()上进行!