使用多个sqlite表填充ListView及其详细信息视图

时间:2013-04-18 11:44:34

标签: android sqlite android-layout android-listview

目前我正在寻找一个解决方案,用来自3个不同SQLite表的内容填充ListView。点击时,每个ListView项(行)应显示相应的详细视图(Activity),该视图基于三个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和详细视图之间获得更好的匹配?

1 个答案:

答案 0 :(得分:0)

您可以使用自定义适配器来确定要启动的Activity,设置自定义行视图等。一种方法,您可以创建一个行对象接口,并检查对象类型以确定行和集的布局诸如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;
}
}