2014-10-02 14 views
0

Я хочу создать функцию, которая принимает массив текста и создает кнопки и добавляет их в представление.

Это мой код.

Он работает и создает кнопки, но когда я вызываю функцию дважды, он не создает два линейных макета, он просто показывает последний, вызывающий, как будто он удаляет первый.

Как я могу создать новый линейный макет и добавить его в представление?

Динамически создавая представления

// Create a view 
protected boolean CreateTheButtons(String[] names) 
{ 
    try 
    { 
      LinearLayout linLayout = new LinearLayout(this); 
      linLayout.setOrientation(LinearLayout.HORIZONTAL); 
      LayoutParams linLayoutParam = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      // set LinearLayout as a root element of the screen 
      linLayout.setWeightSum(names.length); 
      setContentView(linLayout, linLayoutParam); 

      LayoutParams lpView = new LayoutParams(0, LayoutParams.WRAP_CONTENT); 
      lpView.weight = 1; 

      for (int i = 0; i < names.length; i++) { 

      Button btn = new Button(this); 
      btn.setText(names[i]); 
      linLayout.addView(btn, lpView); 

      } 
      return true; 
    } 
    catch(Exception ex) 
    { 

     return false; 
    } 




} 
+0

почему я получаю -1 на вопрос? –

ответ

1

Он работает и создания кнопок, но когда я вызвать функцию дважды не создает два линейных макетов он просто показывает последний один называется, если он удаляет первый ,

Ваш код удаляет первый LinearLayout в результате вызова метода, потому что вы используете setContentView() (который заменит текущий вид деятельности (если таковая будет найдена) с точки зрения, что вы передаете в качестве параметра). Вместо этого вы должны удалить звонок до setContentView() и вставить держатель ViewGroup для LinearLayouts, который вы планируете добавить через этот метод.

<!-- This will be the content view of the activity --> 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/parent" /> 

Установите расположение выше, как вид контента для деятельности, в onCreate() метода:

setContentView(R.layout.the_layout_above); 

В методе вы затем:

protected boolean CreateTheButtons(String[] names) { 
    try { 
      LinearLayout linLayout = new LinearLayout(this); 
      linLayout.setOrientation(LinearLayout.HORIZONTAL); 
      LinearLayout.LayoutParams linLayoutParam = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);    
      linLayout.setWeightSum(names.length); 
      // assuming this method is in an Activity 
      LinearLayout parent = (LinearLayout) findViewById(R.id.parent); 
      parent.addView(linLayout, linLayoutParam); 

      LayoutParams lpView = new LayoutParams(0, LayoutParams.WRAP_CONTENT); 
      lpView.weight = 1; 

      for (int i = 0; i < names.length; i++) { 

      Button btn = new Button(this); 
      btn.setText(names[i]); 
      linLayout.addView(btn, lpView); 
      } 
      return true; 
    } catch(Exception ex) { 
     return false; 
    } 

} 
+0

thats it ... спасибо: D Cheers –

+0

У меня есть другой вопрос ... что я на самом деле пытаюсь сделать, это создать библиотеку, которая создает кнопки в линейном виде ... Я попытался исследовать, как создать библиотеку, но результаты не помогли мне. Как я могу это сделать как функцию. Это может быть операция или она должна быть фрагментом? Если вам нужно, чтобы я открыл еще один вопрос, я сделаю это. –

+0

@DanyMinassian Я не вижу, где у вас проблемы? Создание проекта библиотеки или фактического кода для добавления. Для чего-то эта простая библиотека, вероятно, слишком много. – Luksprog

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