0

目前我正在寻找一种解决方案,用来自 3 个不同 SQLite 表的内容填充 ListView。点击时,每个 ListView 项目(行)应显示相应的详细视图(活动),该视图基于三个 xml 布局之一。

有什么建议么?

编辑:

目前我为一种类型的 Object/SQLite 表解决了这个问题。从 SQLite 表中获取内容到 ArrayList 并通过 putExtra 将其传递给细节活动,该活动处理设置文本/内容。

listView 条目的匹配和启动相应的详细视图通过 arrayList 索引与 listView 索引匹配来解决。

我不确定这是否是一个适当的解决方案。估计不是...

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

   Intent typeOne_details_intent = new Intent(this, TypeOneDetailActivity.class);
   typeOne_result = new TypeOneResult();
   typeOne_result = typeOneResult_arr.get(position); 
   typeOne_details_intent.putExtra("result", TypeOneResult);
   startActivity(typeOne_details_intent);
}

如何解决这个问题以添加 typeTwoDetails 并在 listview 和根据 detailview 之间获得更好的匹配?

4

1 回答 1

0

您可以使用自定义适配器来确定要启动的活动,设置自定义行视图等。一种方法是,您可以创建行对象接口,并检查对象类型以确定行的布局并设置诸如onClick 侦听器和要启动的 Activity。

下面的快速示例:

public class CustomAdapter extends BaseAdapter<ListObjectInterface>{
...
ListObjectInterface data[];
....

public CustomAdapter(Context context, int layoutResourceId, ListObjectInterface[] data) {
    ...
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ... /* do things. such as check if instance is present, etc. */

    ListObjectInterface object = data[position];

    if (object instanceOf TypeA) {
        row = inflater.inflate(layoutResourceIdA, parent, false);
        ...
        ... /* get View objects and set Button listener to launch Activity A */
    } else if (object instanceOf TypeB) {
        row = inflater.inflate(layoutResourceIdB, parent, false);
        ...
        ... /* get View objects and set Button listener to launch Activity B */
    } ... /* etc */

    ... /* more logic */

    return row;
}
}
于 2013-04-19T16:00:51.423 回答