2010-08-13 4 views
0

다른 문제가 있으며이 중 하나가 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> 

수 ... 실제 문제는 다음과 같습니다. 사용자가 갤러리에서 이미지를 선택하면 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, 제목 및 설명이 모두 포함되어 있지만 App이 마지막으로 표시되면 추가 할 LinearLayout의 모든 editText에는 갑자기 Parcelable 배열의 마지막 UploadObject 제목과 설명이 포함됩니다. 다시 말하지만 우리는 객체를 추가 할 때마다 디버그합니다. 객체에는 올바른 데이터가 포함되어 있습니다. 우리는 당혹스럽고 여기에 도움이 필요합니다!

+0

추가 설명으로, 충돌에서 복구 중이므로 onCreate 메서드에서 ReportInfoParcelable 배열을 구문 분석합니다. 거기에있는 데이터가 정확합니다. – DavidAndroidDev

답변

0

우리는 그것을 얻었다!

여기에 무슨 일이 일어나고 있는지 확실하지 않지만 onPostCreate (Bundle) 메서드를 오버로드 (sp?)하고 여기에서 번들을 구문 분석하면 문제가 해결됩니다. onCreate() 중에 xml 파일을 팽창시켜 무언가를 엉망으로 만드는 뭔가가 있어야합니다.

어쨌든 XML을 일반 레이아웃 이외로 팽창해야하는 경우 onPostCreate()를 수행하십시오!