【问题标题】:How to programatically add items to ListView from an ArrayAdapter?如何以编程方式将项目从 ArrayAdapter 添加到 ListView?
【发布时间】:2015-02-14 07:42:27
【问题描述】:

我已经尝试了所有方法,但我无法正常工作!

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

由于我不知道它会返回多少项目,所以我无法将它放在我的 ListView 布局中,所以我需要以编程方式进行。

我该怎么做??

编辑:更多信息...

在我的“holder.linearLayout”中,我想要一个TextView,每个从mObject.getSets() 返回的项目一个,可能是一个,可能是10。这就是为什么我不能放入我的llSets ListView布局文件,不知道要放多少TextViews。

编辑:

找到一个独奏: 在我的 ListView 布局的 LinearLayout 中。我只是遍历了子 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 布局:

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

【问题讨论】:

  • 当前代码有什么问题?好像还可以
  • 我不明白你想做什么!!!

标签: java android arraylist adapter getview


【解决方案1】:

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

This 是一个很好的教程来解释这一点。我强烈向您推荐本教程,以及遇到此类问题的任何其他人。

【讨论】:

  • 上面的 getView 函数来自我的自定义 ArrayAdapter。
【解决方案2】:

您必须使用另一个自定义 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());

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

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

【讨论】:

  • 感谢您的帮助,我搜索了嵌套列表视图,但我发现您不应该这样做:) 找到另一个线程,我将在主线程中添加解决方案
猜你喜欢
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多