我需要显示A对象列表(想想List<A>
)。 A具有以下结构:
class A {
List<B> bList;
List<C> cList;
}
所有三个列表都可以是任意长度的。 bList
和cList
应在As列表的每一行中以其整个长度显示。每个列表都由SQLite游标支持。这是一种日历视图。下图说明了这个想法:
现在,我想知道以“Android方式”实现这一目标的最佳方法是什么。我尝试了很多东西:
也许我可以通过不同的方式充分利用现有功能?
我已经看过StackOverflow上的类似问题了。最重要的两个建议似乎是:
答案 0 :(得分:0)
要实现此类视图,您需要实现两件事。
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的一部分
ANd IBean是java bean类,在列表中包含你的5 iTem。 您不想要的任何项目都将其留空。