Concat将Cursor结果导入单个listview元素

时间:2011-06-13 21:37:59

标签: android listview concat

我有一个android listview,它有一个two_line_list_item布局.... text1和text2

我有一个SQL查询,它返回我的Cursor ....在下面的示例中,我已将NameA从SQL设置为text1,将NameB设置为text2

        // Create an array to specify the fields we want to display in the list (only TITLE)
    String[] from = new String[]{"NameA", "NameB"};

    // and an array of the fields we want to bind those fields to (in this case just text1)
    int[] to = new int[]{android.R.id.text1, android.R.id.text2};

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter matches = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, MatchesCursor, from, to);
    setListAdapter(matches);

我怎么能连接这两个名字(不改变我的SQL查询)所以text1将是“NameA v NameB”...

提前致谢

4 个答案:

答案 0 :(得分:1)

在您的查询中

NameA || "v" || NameB AS NameAB

然后删除第二个textView(android.R.text2)

在你的回报预测中," NameAB"遗漏其他列(保留KEY_ID),因为您将不再需要它们。

答案 1 :(得分:0)

在我看来,您需要编写扩展BaseAdapter的自定义适配器。

答案 2 :(得分:0)

一种肮脏的方式是在你的xml中使用3个视图:

<TextView
        android:id="@+id/nameA"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp" />
<TextView
        android:id="@+id/separator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=" vs "
        android:textSize="30dp" />
<TextView
        android:id="@+id/nameB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp" />

将所有内容包装在水平LinearLayout中。

答案 3 :(得分:0)

您需要编写自己的扩展BaseAdapter

的适配器
public class CustomAdapter extends BaseAdapter {

    private Context context;
    private int listItemLayout;
    private String[] nameAs;
    private String[] nameBs;

    public CustomAdapter(Context context, int listItemLayout, String[] nameAs, String[] nameBs) {
        this.context = context;
        this.listItemLayout = listItemLayout;
        this.nameAs = nameAs;
        this.nameBs = nameBs;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if(convertView==null)
            convertView = LayoutInflater.from(context).inflate(listItemLayout, null);

            TextView textView1 = (TextView)findViewById(android.R.id.text1);
            textView1.setText(nameAs[position] + " v " + nameBs[position]);
        return convertView;
    }

}

现在您需要做的就是修改一些数据库访问函数以返回两个名称数组,并将它们传递给CustomAdapter的构造函数

最后,请致电:

CustomAdapter myAdapter = new CustomAdapter(this, android.R.layout.two_line_list_item, nameAs, nameBs);
setListAdapter(myAdapter);

请注意,请尝试按照链接中建议的ViewHolder pattern进行操作。