0

我需要显示 A 对象的列表(想想List<A>)。A具有以下结构:

class A {
    List<B> bList;
    List<C> cList;
}

所有三个列表都可以是任意长度。bList并且cList应该以它们的整个长度显示在 As 列表的每一行中。每个列表都由 SQLite 游标支持。这是一种日历视图。下图说明了这个想法:

在此处输入图像描述

现在,我想知道“以 Android 方式”实现这一目标的最佳方式是什么。我尝试了多种方法:

  1. A 的 ListView 和 B 和 C 的嵌套 ListView:不推荐,很难禁用 B 和 C 的滚动行为。
  2. A 的 ListView 与 B 和 C 的 LinearLayout 并以编程方式将子视图添加到适配器中的 LinearLayouts:我必须管理 B 和 C 的光标更新并自己调整行的高度,适配器中有很多视图管理代码不属于。
  3. 组合嵌套线性布局的所有内容:与 2 相同的问题,需要处理的游标更多。

也许有一种不同的方式可以让我充分利用现有功能?

我已经看过 StackOverflow 上的类似问题。最重要的两个建议似乎是:

  • 在多个活动/片段上传播数据:考虑过,不是一个选项,因为不友好(在这种情况下)。
  • 使用ExpandableListView:似乎不适用于数据结构,Bs和Cs的列表应该从一开始就可见。
4

1 回答 1

1

要实现这种类型的视图,您需要实现两件事。

ListView listView;
IArrayAdapter iArrayAdapter;

使用 xml 中提供的 id 初始化 listView。

Activity.this.runOnUiThread(new Runnable() {
        public void run() {
            iArrayAdapter = new IArrayAdapter(Activity.this,
                    R.layout.list_item, "list of items group it from Bean");
            listView.setAdapter(iArrayAdapter);
            iArrayAdapter.notifyDataSetChanged();
        }
    });

list_item 是另一种布局,它包含您需要在列表中显示的显示类型。

IArrayAdapter 是扩展 ArrayAdapter 的类

public class IArrayAdapter extends ArrayAdapter<IBean> {

private final Activity context;
private final ArrayList<IBean> iBeans;
private int resourceId;

public InboxArrayAdapter(Activity context, int resourceId,
        ArrayList<IBean> iBeans) {
    super(context, resourceId, inboxBeans);
    this.context = context;
    this.iBeans = iBeans;
    this.resourceId = resourceId;
}

/*
 * TO update View
 * 
 * @see android.widget.ArrayAdapter#getView(int, android.view.View,
 * android.view.ViewGroup)
 */
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = convertView;
    if (rowView == null) {
        LayoutInflater layoutInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = layoutInflater.inflate(resourceId, null);

    final IBean iBean = iBeans.get(position);
    final ImageView imageView = (ImageView) rowView
            .findViewById(R.id.message);
    final TextView rowTxt = (TextView) rowView
            .findViewById(R.id.senderName);
    final TextView rowTxt1 = (TextView) rowView
            .findViewById(R.id.senderMessage);
    final TextView rowTxt2 = (TextView) rowView
            .findViewById(R.id.senderTime);
    final CheckBox check = (CheckBox) rowView.findViewById(R.id.check);
    .....set text here.....
return rowView;
}

}

imageView、rowtext 等是布局 list_item 的一部分

并且 IBean 是 java bean 类,在列表中包含您的 5 个 iTem。您不想要的任何项目都将其留空。

于 2012-10-08T12:36:30.967 回答