2015-05-03 2 views
1

У меня есть работа с макетом. После запроса GET на сервер я хочу динамически добавлять новые элементы в этот макет.Android способ добавить новый xml-макет

Я хочу добавить эти элементы несколько раз, используя for-structure.

элементы, которые я хочу добавить следующие:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="64dp" 
      android:background="@drawable/outer_border" 
      android:padding="2dp" 
      android:layout_marginTop="20dp"> 

      <TextView 
       android:id="@+id/textView1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentTop="true" 
       android:background="@color/orange" 
       android:height="40dp" 
       android:paddingLeft="5dp" 
       android:paddingTop="5dp" 
       android:text="TW" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:textColor="#ffffff" 
       android:textSize="70px" 
       android:width="60dp" /> 

      <CheckBox 
       android:id="@+id/checkBox1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:layout_centerVertical="true" /> 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignBottom="@+id/textView3" 
       android:layout_toLeftOf="@+id/checkBox1" 
       android:text="inca 6 zile" 
       android:textAppearance="?android:attr/textAppearanceSmall" /> 

     </RelativeLayout> 

Я попытался это:

for(int i = 0; i < homeworkList.size(); i++){ 
    LinearLayout linearLayout = (LinearLayout) currentActivity.findViewById(R.id.linearLayout2); 

    RelativeLayout newLayout = new RelativeLayout(currentActivity, null, R.style.HomeworkLayout); 

    TextView text = new TextView(currentActivity); 
    TextView text1 = new TextView(currentActivity); 
    text1.setText("da"); 
    text.setText("nu"); 

    newLayout.addView(text1); 
    newLayout.addView(text); 

    linearLayout.addView(newLayout, relativeParams); 
    } 

Но никакого результата, те TextView были добавлены, но друг на друга, и относительный макет, который я только что добавил, для него не имеет никакого стиля, который я добавил с помощью R.style.HomeworkLayout.

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

ответ

0

Если вы хотите использовать макет, который повторяется, почему вы предпочитаете использовать собственный макет лайнера.

Простой и базисное решение упоминается по этой ссылке http://android-coding-tuts.blogspot.in/2012/02/custom-listview-with-sliding-view-for.html

+2

Не могли бы вы объяснить относительную часть вместо добавления учебник ссылку в одиночку? Ссылки не на 100% надежны, и ссылка может не работать в будущем по какой-то причине. – VicJordan

2

те TextView были добавлены, но поверх друг друга

Вот что вы сказали RelativeLayout делать. Если вы хотите указать правила позиционирования, вы должны были передать экземпляры RelativeLayout.LayoutParams в addView(), когда вы добавляли TextView виджетов.

Каков наилучший способ добавить элементы с таким стильным дизайном?

Ну, вероятно, ответ заключается в использовании ListView или RecyclerView. Это, как говорится, самое простое решение, которое держит ваш вертикальный LinearLayout будет раздувать строки:

LinearLayout linearLayout = (LinearLayout) currentActivity.findViewById(R.id.linearLayout2); 

for(int i = 0; i < homeworkList.size(); i++){ 
    View row=getLayoutInflater().inflate(R.layout.row, linearLayout, false); 

    // call findViewById() to retrieve your TextView widgets and fill them in 

    linearLayout.addView(row); 
} 

Это предполагает, что макет вы показываете в вашем вопросе называется R.layout.row; отрегулируйте звонок inflate() по необходимости, если это не имя. Это также предполагает, что фрагмент кода находится в методе активности, в которой размещен этот пользовательский интерфейс.

+0

Звучит неплохо. Но если я использую тот же R.layout.row 5 раз, как мне получить мои текстовые элементы, если все они имеют одинаковый идентификатор в шаблоне? – CrazyDog

+0

@CrazyDog: вызывается 'row.findViewById()', а не 'findViewById()'. Это приведет к извлечению виджетов с нужным именем в строке, в отличие от всего действия. – CommonsWare

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