代码之家  ›  专栏  ›  技术社区  ›  DavidAndroidDev

动态附加视图和崩溃

  •  0
  • DavidAndroidDev  · 技术社区  · 15 年前

    还有一个问题,这一个让人困惑!

    我们走吧。

    我们有一个布局…

    <?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。同样,我们通过对象的每个附加进行调试,对象包含正确的数据。我们很困惑,需要帮助!

    1 回复  |  直到 15 年前
        1
  •  0
  •   DavidAndroidDev    15 年前

    我们明白了!

    不完全确定这里发生了什么,但我们骑过了(SP?)方法在这里创建(bundle)并解析bundle,我们的问题就解决了。在onCreate()期间,一定有一些关于膨胀XML文件的内容,这会弄乱某些内容。

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