2015-02-14 2 views
-1

Я пробовал все, но я не могу заставить его работать!Как программно добавлять элементы в ListView из ArrayAdapter?

У меня есть объект, mObject, который сам содержит arrayList объектов, которые я хочу, чтобы отобразить с TextViewmObject.getName() ниже. Как это сделать, проблема в том, что sub ArrayList может отличаться по размеру.

Как я не знаю, сколько предметов он вернет, я не могу поместить его в свой макет ListView, поэтому мне нужно сделать это программно.

Как мне это сделать ??

EDIT: подробнее ...

В моих «holder.linearLayout» Я хочу TextView, один для каждого элемента возвращается из mObject.getSets(), это может быть один, это может быть 10. Вот почему я не могу поставить в моей llSets ListView файл макет, я не знаю, сколько TextView s положить в

EDIT:.

Найдено solotion: в LinearLayout в моем макете ListView. Я просто петельные через все элементы в суб ArrayList и добавил их так:

holder.mLinearLayout.removeAllViews(); 
 
for (Set s : mExercise.getSets()) { 
 
    TextView mSetTextView = new TextView(mContext); 
 
    mSetTextView.setText("Text " + s.getText()); 
 
    holder.mLinearLayout.addView(mSetTextView); 
 
}

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    CustomObject mObject = CustomObjects.get(position); 

    if (convertView == null) { 
     convertView = mLayoutInflater.inflate(R.layout.lv_exercise, null); 

     holder = new ViewHolder(); 
     holder.tvEName = (TextView) convertView.findViewById(R.id.tvEName); 

     // I Want to add a new TextView to this linyearLayout for each item returned by mObject.getSets(); 
     holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.llSets); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder)convertView.getTag(); 
    } 

    holder.tvEName.setText(mObject.getName()); 

    return convertView; 
} 

llSets ListView Layout:

<?xml version="1.0" encoding="utf-8"?> 
 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
      android:orientation="vertical" 
 
      android:layout_width="fill_parent" 
 
      android:layout_height="fill_parent" 
 
      android:layout_marginBottom="10dp"> 
 
    <TableRow android:layout_marginBottom="5dp"> 
 
     <TextView 
 
      android:layout_width="0dp" 
 
      android:layout_height="fill_parent" 
 
      android:layout_weight="2" 
 
      android:text="Name" 
 
      android:gravity="center" 
 
      android:id="@+id/tvEName" 
 
      android:textSize="22sp" 
 
      android:fadingEdge="horizontal" 
 
      android:ellipsize="end" 
 
      android:singleLine="true"/> 
 

 

 
    </TableRow> 
 
    <TableRow> 
 
     <LinearLayout 
 
      android:id="@+id/llSets" 
 
      android:orientation="vertical" 
 
      android:layout_height="fill_parent" 
 
      android:layout_width="fill_parent"> 
 

 

 
      <!-- I want textviews here, one for each item returned from mObject.getSets() 
 
      As I don't know how many items it will return, i need to add them programatically, I guess ?. 
 
      --> 
 

 
     </LinearLayout> 
 
    </TableRow> 
 
</TableLayout>

+0

В чем проблема с текущим кодом? Кажется, это нормально – Fahim

+0

Я не понимаю, что вы хотите делать !!! –

ответ

0

Я wo uld рекомендует вам узнать о том, как создать пользовательский ArrayAdapter для отображения ваших данных в ListView.

This - хороший учебник, который объясняет именно это. Я настоятельно рекомендую этот учебник для вас и любого другого, у которого возникают такие проблемы.

+0

Функция getView сверху - это мой пользовательский ArrayAdapter. –

0

Вы должны добавить listview в свой существующий список, используя другой пользовательский ArrayAdapter. Нечто подобное (в вашей деятельности)

ArrayAdapter<mObject> adapter = new CustomAdapterForMyObjects(); 
//Add Objects with Lists inside to your adapter 
mObject obj1 = new mObject("Hello World"); 
//Add listitems to your Object 
mObject obj2 = new mObject("Second one"); 
//Add listitems to your Object 

lv.setAdapter(adapter); 

в пользовательском адаптере инстанцировании другой ListView и добавить элементы из ваших объектов. (в getView())

//instantiate ListView  
ListView lv = convertView.findViewById(R.id.lv_forTheItemsOfYourObject) 

//get current object for that position  
mObject object = list.get(position); 

//add your items to the Adapter, in this case strings  
ArrayAdapter<String> adapterForItems = new ArrayAdapter<String>(context, R.layout.rowforitems, object.getItems()); 

Теперь все предметы вашего Объекта должны быть добавлены.

Основная информация: Ключ предназначен для использования listview, интегрированного в другой список.

+0

Спасибо за помощь, я ищу список вложенных списков, и все, что я мог найти, это то, что вы не должны этого делать :) Нашел еще один поток, хотя я добавлю решение в основной поток –

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