2015-08-04 5 views
0

Мне нужно динамически создавать ImageButtons для массива изображений после завершения сетевого вызова. В настоящее время я работаю с количеством жестко закодированных кнопок, но количество кнопок будет динамически добавляться и удаляться на сервере.Динамически добавлять ImageButtons

XML-код ниже это работает, как его жёстко:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" 
      android:weightSum="1" 
      tools:background="@color/black" 
android:id="@+id/dotw_list"> 

<ImageButton 
    android:id="@+id/dotw_imageButton_1" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:layout_marginTop="10dp" 
    android:adjustViewBounds="false" 
    android:background="@drawable/layout_bg" 
    android:padding="5dp" 
    android:scaleType="centerInside"/> 

<ImageButton 
    android:id="@+id/dotw_imageButton_2" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginRight="10dp" 
    android:layout_marginTop="10dp" 
    android:adjustViewBounds="false" 
    android:background="@drawable/layout_bg" 
    android:padding="10dp" 
    android:scaleType="centerInside"/> 

<ImageButton 
    android:id="@+id/dotw_imageButton_3" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginRight="10dp" 
    android:layout_marginTop="10dp" 
    android:adjustViewBounds="false" 
    android:background="@drawable/layout_bg" 
    android:padding="10dp" 
    android:scaleType="centerInside"/> 

<ImageButton 
    android:id="@+id/dotw_imageButton_4" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginRight="10dp" 
    android:layout_marginTop="10dp" 
    android:adjustViewBounds="false" 
    android:background="@drawable/layout_bg" 
    android:padding="10dp" 
    android:scaleType="centerInside"/> 

<ImageButton 
    android:id="@+id/dotw_imageButton_5" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginRight="10dp" 
    android:layout_marginTop="10dp" 
    android:adjustViewBounds="false" 
    android:background="@drawable/layout_bg" 
    android:padding="10dp" 
    android:scaleType="centerInside"/> 
</LinearLayout> 

Ниже приведен код, который я использовал для жесткого кода, но я это нужно, чтобы динамически изменяться, когда есть больше/меньше пунктов в Массив

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

    // Get extra data included in the Intent 
    String message = intent.getStringExtra("network_response"); 
    Log.d("receiver", "Got message: " + message); 

    home = data.getHomeItem(); 


    try { 
     for (int i = 0; i < home.dotwItemArray.size(); i++) { 
      System.out.println("Size of DOTW Array for the home screen is " + home.dotwItemArray.size()); 

      DotwItem dotwItem = home.dotwItemArray.get(i); 

      if (i == 0) { 
       request.getImage(dotwItem.getThumbnailImageUrl(), button_dotw_1); 
       System.out.println("dotwItem1 is set"); 
      } 
      if (i == 1) { 
       request.getImage(dotwItem.getThumbnailImageUrl(), button_dotw_2); 
       System.out.println("dotwItem2 is set"); 
      } 
      if (i == 2) { 
       request.getImage(dotwItem.getThumbnailImageUrl(), button_dotw_3); 
       System.out.println("dotwItem3 is set"); 
      } 
      if (i == 3) { 
       request.getImage(dotwItem.getThumbnailImageUrl(), button_dotw_4); 
       System.out.println("dotwItem4 is set"); 
      } 
     } 

    } catch (Exception e) { 
     System.out.println("Error is: " + e + " - Exception is it: " + e.getStackTrace()[2].getLineNumber()); 

    } 
} 
}; 

причина Я делаю это, потому что я не знаю длину массива, что я получаю, пока сеть вызов не будет завершен. Сетевой вызов инициируется в методе onCreate, и, как вы видите, это в методе onReceive, этот метод запускается после завершения сетевого вызова.

Я посмотрел на это link from StackOverflow, но Im немного запутался, поскольку я пытаюсь установить изображение на основе сетевого запроса.

Благодаря

ответ

1

После сетевого вызова, просто добавьте ImageButtons в макете. Раньше я делал подобные вещи. Некоторый код, подобный приведенному ниже, должен работать.

theViewGroupThatHoldsTheButtons.addView(new View(this)); 

Вам может понадобиться установить некоторые LayoutParams на new View, или вы можете надуть вид, имитируя то, что вы бы делать, если у вас есть список и адаптер.

+0

будет работать даже после того, как экран был создан? – x10sion

+0

Да, определенно. – kentarosu

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