2015-03-17 4 views
1

Я пытаюсь динамически создавать некоторые макеты, а затем раздувать их. В настоящее время у меня есть некоторые макеты, и я раздуваю их, используя свой собственный класс адаптера.Динамическое создание XML-карт

Однако теперь мне нужно создать несколько карт на основе генерируемых данных. Я попытался с помощью card класса для этого, как это, например

for (int i = 1; i < 10; i++) { 
      Card card = new Card(this); 
      card.setText("Test " + i); 
      mCards.add(card); 
     } 

Я не могу этого разработано, как я хотел бы его Тхо. Итак, есть ли способ использовать настройку xml для этого, поскольку у меня есть больше вариантов дизайна таким образом?

+0

использование LayoutInflater затем – pskink

+0

Создайте макеты в формате XML и раздувать их – cozeJ4

+0

что-то вроде этого в цикле LayoutInflater Inflater = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE); RelativeLayout card = (RelativeLayout) inflater.inflate (R.layout.card, null); – cozeJ4

ответ

2

на риск получения downvoted снова я вывешу мое решение

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

Сначала я создал макет XML с TextView внутри него

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:id="@+id/test_content" 
    android:textSize="47pt"/> 

</LinearLayout> 

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

public class xmlAdapter extends CardScrollAdapter { 
private List<Integer> mCards; 
private LayoutInflater mInflater; 

public xmlAdapter(List<Integer> mCards, LayoutInflater inflater) 
{ 
    this.mCards = mCards; 
    this.mInflater = inflater; 
} 


@Override 
public int getCount() { 
    return mCards.size(); 
} 

@Override 
public Object getItem(int i) { 
    return mCards.get(i); 
} 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 
    View mView = view; 

    view = mInflater.inflate(R.layout.xml_test, viewGroup, false); 
    TextView text = (TextView) view.findViewById(R.id.test_content); 
    text.setText("Test " + mCards.get(i)); 
    view.setTag(text); 
    return view; 
} 

@Override 
public int getPosition(Object o) { 
    return this.mCards.indexOf(o); 
} 

}

и в моем классе активности я сделал следующее.

в OnCreate()

CreateCards(); 

    mCardScroller = new CardScrollView(this); 
    mCardScroller.setAdapter(new xmlAdapter(numberCards, getLayoutInflater())); 

    mCardScroller.setOnItemClickListener(this); 

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

public void CreateCards() { 
    for (int i = 1; i < 10; i++) { 
    numberCards.add(i); 
    } 
} 
Смежные вопросы