如何以编程方式从ArrayAdapter向ListView添加项目?

时间:2015-02-14 07:42:27

标签: java android arraylist adapter getview

我已经尝试了所有的东西,但我没有让它发挥作用!

我有一个对象mObject,它本身包含一个arrayList个对象,我希望在TextView mObject.getName()以下ArrayList显示这些对象。我如何做到这一点,问题是子ListView的大小可能会有所不同。

由于我不知道它将返回多少项,我无法将其放入我的holder.linearLayout布局中,因此我需要以编程方式进行。

我该怎么办?

编辑:更多信息......

在我的“TextView”中,我想要一个mObject.getSets(),每个项目一个ListView,它可能是一个,可能是10.这就是为什么我不能放在我的llSets TextView布局文件中,我不知道要放入多少holder.mLinearLayout.removeAllViews(); for (Set s : mExercise.getSets()) { TextView mSetTextView = new TextView(mContext); mSetTextView.setText("Text " + s.getText()); holder.mLinearLayout.addView(mSetTextView); }个。

编辑:

发现一个孤独: 在ListView布局中的LinearLayout中。我只是循环遍历子ArrayList中的所有项目,并添加如下:

@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;
}

<?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>

llSets ListView布局:

{{1}}

2 个答案:

答案 0 :(得分:0)

我建议您了解如何创建自定义ArrayAdapter以在ListView中显示您的数据。

This是一个很好的教程,可以解释这一点。我强烈推荐本教程,以及任何其他有此类问题的教程。

答案 1 :(得分:0)

您必须在现有列表视图中添加另一个自定义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());

现在应该添加对象的所有项目。

要点: 关键是使用集成在另一个列表视图中的列表视图。