2016-04-08 1 views
0

Я пытаюсь добавить определенный Relative Layout xml программно. Он состоит из ImageView, EditText и TextView. Кажется, проблема заключается в том, что я пытаюсь сделать это по этому методу onActivityResult после возвращения из другого действия. Когда я делаю это где-то еще, он работает, и макет, который я хочу создать, отображается правильно (например, я успешно попробовал «onCreate» и нажатием кнопки), но если внутри «onActivityResult» не работает. Мне нужно, чтобы он был там.Относительная компоновка, добавленная программно, не будет отображаться

Отпечатки выводятся успешно в любом случае, нет ошибок или сбоев, но макет просто не отображается. Любые предложения приветствуются.

Это файл XML Я хочу создать:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="260dip"> 

    <ImageView 
     android:id="@+id/damagePicture" 
     android:layout_width="match_parent" 
     android:layout_height="210dip" 
     android:scaleType="centerCrop" 
     android:layout_marginTop="10dip" 
     android:layout_marginLeft="10dip" 
     android:layout_marginRight="10dip" 
     android:src="@drawable/nocar"/> 

    <EditText 
     android:id="@+id/orderTextfield" 
     android:layout_height="40dip" 
     android:layout_width="match_parent" 
     android:gravity="left|center" 
     android:layout_marginLeft="10dip" 
     android:layout_marginRight="45dip" 
     android:hint="Enter damage description" 
     android:textSize="14sp" 
     android:layout_alignParentLeft="true" 
     android:textColor="@color/black" 
     android:textColorHint="@color/gray_vin_search_text" 
     android:background="@null" 
     android:singleLine="true" 
     android:editable="true" 
     android:layout_below="@+id/damagePicture"/> 

    <TextView 
     android:id="@+id/removePicture" 
     android:layout_width="40dip" 
     android:layout_height="40dip" 
     android:text="@string/discardPicture" 
     android:gravity="center|center" 
     android:textColor="@color/black" 
     android:textSize="24sp" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentBottom="true" 
     android:clickable="true" 
     android:onClick="removePicture"/> 

    <View 
     android:id="@+id/bottomLine" 
     android:layout_width="match_parent" 
     android:layout_height="1dip" 
     android:layout_alignParentBottom="true" 
     android:background="@color/gray_for_line"></View> 

</RelativeLayout> 

здесь соответствующие части кода:

public void addResultingDamagePicture(String pathToFile) { 
     System.out.println("ADD RESULTING DAMAGE PICTURE"); 
     LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(this.LAYOUT_INFLATER_SERVICE); 
     View damagePictureSet = layoutInflater.from(this).inflate(R.layout.damage_picture_set, picturesCell, false); 
     ((TextView) damagePictureSet.findViewById(R.id.removePicture)).setTypeface(fontAwesome); 
     TextView remove = (TextView)damagePictureSet.findViewById(R.id.removePicture); 
     remove.setTypeface(fontAwesome); 
     File imgFile = new File(pathToFile); 
     if(imgFile.exists()) { 
      System.out.println("ADD RESULTING DAMAGE PICTURE - FILE OK"); 
      BitmapFactory.Options opt = new BitmapFactory.Options(); 
      opt.inSampleSize = 4; 
      final Bitmap thebmp = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), opt); 
      ((ImageView) damagePictureSet.findViewById(R.id.damagePicture)).setImageBitmap(thebmp); 
      picturesCell.addView(damagePictureSet); 
     } else { 
      System.out.println("ADD RESULTING DAMAGE PICTURE - NO FILE EXISTS!!!"); 
     } 
     return; 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == SHOOT_DAMAGE_PICTURE && resultCode == RESULT_OK) { 
      final String encodedPicture = data.getStringExtra("PATH_TO_PICTURE"); 
      System.out.println("PICTURE RESULT = " + encodedPicture); 
      addResultingDamagePicture(encodedPicture); 
     } else { 
      System.out.println("ON ACTIVITY RESULT = NOT OK"); 
      return; 
     } 
    } 
+0

На первый взгляд, вам не хватает, чтобы освежить ваш взгляд, ср. http://stackoverflow.com/questions/5991968/how-to-force-an-entire-layout-view-refresh – TAM

+0

Вы можете попробовать Hierarchy Viewer, чтобы посмотреть, где было просмотрено: https://developer.android.com/ tools/help/hierarchy-viewer.html –

+0

Does 'View damagePictureSet = layoutInflater.from (this) .inflate (R.layout.damage_picture_set, picturesCell, true);' вместо 'View damagePictureSet = layoutInflater.from (this) .inflate (R.layout.damage_picture_set, picturesCell, false); 'help? – jaibatrik

ответ

1

В некоторых случаях метод onCreate может вызываться после onActivityResult метод. В этом случае снова вызывается метод setContentView, снова создавая исходный макет. Возможно, вы захотите установить некоторые флаги или обновить свои данные независимо от вашего Activity, чтобы вы могли воссоздать View в зависимости от флага/данных.

+0

В этом была проблема, спасибо. Я сделал соответствующие данные независимыми от Activity, тогда он сработал. –

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