Конкретный результат из Cursor в единый элемент списка - PullRequest
0 голосов
/ 14 июня 2011

У меня есть список просмотра Android, и он имеет макет two_line_list_item .... text1 и text2

У меня есть SQL-запрос, который возвращает мне мой курсор .... В приведенном ниже примере я установил 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 ]

1 голос
/ 06 марта 2013

В вашем запросе выполните

NameA || "v" || NameB AS NameAB

Затем удалите второй textView (android.R.text2)

В ваших обратных проекциях поставьте «NameAB», оставив остальные столбцы (оставьте KEY_ID) так как они вам больше не понадобятся.

0 голосов
/ 18 октября 2012

Грязным способом было бы использовать 3 представления в вашем xml:

<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.

0 голосов
/ 18 октября 2012

Вам нужно написать собственный адаптер, который расширяет 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 , предложенному в ссылке.

0 голосов
/ 14 июня 2011

Мне кажется, что вам нужно написать собственный адаптер, который расширяет BaseAdapter.

...