2013-03-03 3 views
0

Мне нужно было добавить линейный график, который имеет изображение и текстовое изображение сразу после того, как пользователь выбирает фотографию из локального, а затем отображается в (parent) linearlayout. Добавление первого linearlayout не имеет проблем, но как только я хочу ввести второй linearlayout, тогда приложение аварийно завершает работу.добавление нескольких linearlayout в программном сбое linearlayout

JAVA файл

public class newExpense extends Fragment { 

ImageView addImage; 
LinearLayout imageList; 
final int RQS_LOADIMAGE = 0; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.new_expense_copy, container, false); 

    addImage = (ImageView) rootView.findViewById(R.id.addImage); 
    addImage.setOnClickListener(buttonSaveOnClickListener); 

    imageList = (LinearLayout) rootView.findViewById(R.id.imageList); 

    return rootView; 
} 

ImageView.OnClickListener buttonSaveOnClickListener 
= new ImageView.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle("Select an option") 
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // User cancelled the dialog 
        } 
       }) 
       .setItems(R.array.addImage, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

         if (which == 0) { 
          Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
          startActivityForResult(takePicture, RQS_LOADIMAGE); 

         } else { 
          Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
           android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
          startActivityForResult(pickPhoto , RQS_LOADIMAGE); 
         } 
        } 
       }); 
      builder.show(); 
    } 
}; 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == getActivity().RESULT_OK){ 
     switch(requestCode){ 
     case RQS_LOADIMAGE: 
      Uri imageUri = data.getData(); 

      LinearLayout injecterLayout = (LinearLayout) getActivity().getLayoutInflater().inflate(R.layout.image_list, imageList, false); 

      ImageView img = (ImageView) injecterLayout.findViewById(R.id.imageView); 
      TextView txt = (TextView) injecterLayout.findViewById(R.id.textView1); 
      img.setImageURI(imageUri); 
      txt.setText(imageUri.getLastPathSegment().toString()); 
      imageList.addView(injecterLayout); 

      break; 
     } 
    } 
} 

}

ребенок расположение XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/imageItem" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" > 

<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:maxHeight="100dp" 
    android:maxWidth="100dp" /> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="0dp" 
    android:layout_height="100dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:layout_weight="3" 
    android:gravity="center_vertical" 
    android:minWidth="160dp" 
    android:text="test" /> 

<ImageView 
    android:id="@+id/imageRemove" 
    android:layout_width="wrap_content" 
    android:layout_height="100dp" 
    android:src="@android:drawable/ic_delete" /> 

</LinearLayout> 

родительского макета XML

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/ScrollView01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<GridLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:alignmentMode="alignBounds" 
    android:columnCount="2" 
    android:columnOrderPreserved="false" 
    android:useDefaultMargins="true" > 

    <TextView 
     android:id="@+id/amountLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|left" 
     android:text="Amount" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="fill_horizontal" 
     android:orientation="horizontal" > 

     <Spinner 
      android:id="@+id/currency" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom"/> 

     <EditText 
      android:id="@+id/amount" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:layout_weight="1" 
      android:hint="Tap to enter amount" 
      android:inputType="numberDecimal" /> 

    </LinearLayout> 

    <TextView 
     android:id="@+id/accountLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|left" 
     android:text="Paid From" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <Spinner 
     android:id="@+id/account" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" /> 

    <TextView 
     android:id="@+id/categoryLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|left" 
     android:text="Category" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <Spinner 
     android:id="@+id/category" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" /> 

    <TextView 
     android:id="@+id/dateLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|left" 
     android:text="Date" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="fill_horizontal" 
     android:orientation="horizontal" > 

     <Button 
      android:id="@+id/date" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Sat 02/03/2013" /> 

     <ImageButton 
      android:id="@+id/imageButton2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@android:drawable/ic_menu_today" /> 

    </LinearLayout> 

    <TextView 
     android:id="@+id/noteLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|left" 
     android:text="Note" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/note" 
     android:layout_width="300dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" 
     android:ems="10" 
     android:inputType="textMultiLine" /> 

    <TextView 
     android:id="@+id/locationLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|left" 
     android:text="Location" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_gravity="fill_horizontal" > 

     <EditText 
      android:id="@+id/location" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left|bottom" 
      android:ems="10" > 
     </EditText> 

     <ImageButton 
      android:id="@+id/imageButton1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@android:drawable/ic_menu_mylocation" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/photoLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|left" 
     android:text="Photo" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <ImageView 
     android:id="@+id/addImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_column="1" 
     android:layout_gravity="right" 
     android:layout_row="6" 
     android:src="@android:drawable/ic_input_add" /> 

    <Space 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" 
     android:layout_row="7" 
     android:layout_columnSpan="1" /> 

    <LinearLayout 
     android:id="@+id/imageList" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

    </LinearLayout> 


    <Space 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" 
     android:layout_row="6" 
     android:layout_columnSpan="1" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_gravity="fill_horizontal" > 

     <Button 
      android:id="@+id/clearBtn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:text="Clear" /> 

     <Button 
      android:id="@+id/saveBtn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:text="Save" /> 

    </LinearLayout> 

</GridLayout> 

</ScrollView> 

Вход Cat

03-03 23:14:05.676: E/AndroidRuntime(23792): FATAL EXCEPTION: main 
03-03 23:14:05.676: E/AndroidRuntime(23792): java.lang.OutOfMemoryError 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.graphics.drawable.Drawable.createFromStream(Drawable.java:733) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.widget.ImageView.resolveUri(ImageView.java:562) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.widget.ImageView.setImageURI(ImageView.java:340) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at com.example.expensesmanager.newExpense.onActivityResult(newExpense.java:92) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:161) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.app.Activity.dispatchActivityResult(Activity.java:4654) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.app.ActivityThread.deliverResults(ActivityThread.java:2987) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3034) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.app.ActivityThread.access$1100(ActivityThread.java:127) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1188) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.os.Looper.loop(Looper.java:137) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at android.app.ActivityThread.main(ActivityThread.java:4511) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at java.lang.reflect.Method.invokeNative(Native Method) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at java.lang.reflect.Method.invoke(Method.java:511) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
03-03 23:14:05.676: E/AndroidRuntime(23792): at dalvik.system.NativeStart.main(Native Method) 

Может кто-нибудь помочь с какой-то модифицированный код ?? Цените помощь.

+1

Используйте LogCat для проверки трассировки стека Java, связанной с вашим «сбоем». – CommonsWare

+0

Как указано в @CommonsWare, используйте LogCat, чтобы определить, где находится проблема, а затем опубликуйте только соответствующий код, а также журнал LogCat. –

+0

@CommonsWare отредактирован. – Bryanleesh

ответ

1

Вы потеряли память, а точнее из кучи. Ваше приложение ограничено в отношении того, сколько кучи пространства он может использовать - это будет варьироваться от всего лишь до 16 МБ на старых устройствах Android до 64 МБ на новых с высоким разрешением экрана. Как бы то ни было, вы использовали все это, возможно, в растровых изображениях.

use MAT to find out where your heap space is being used.

+0

Я узнал, что добавление изображения израсходовало много памяти, но как этого избежать? Мне просто нужно добавить изображение предварительного просмотра в linearlayout. – Bryanleesh

+0

@ user2126362: «но как этого избежать?». Одновременно используйте меньше и/или меньшие изображения, делая все возможное, чтобы освободить память от старых изображений или переработать эту память (см. «BitmapOptions' и' inBitmap'). – CommonsWare

+0

Я читал, что мне нужно декодировать и масштабировать изображение, но я не знаю, как это сделать. Может ли помочь? – Bryanleesh

Смежные вопросы