2012-03-16 1 views
1

Я продлил SimpleCursorAdapter в соответствии с моими потребностями. Я хочу показать два текста в строке.Изменение данных SimpleCursorAdapter

Одно из этих текстовых просмотров заполняется курсором, но для другого я хочу использовать ArrayList. Позвольте мне привести пример, чтобы уточнить:

Для первого поля я использую данные из курсора

String[] columns = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME }; 
int[] to = new int[] { R.id.toptext }; 

Я хочу использовать ArrayList для второго поля так, что они образуют следующую ListView

Я не знаю, как я могу установить второе поле. Любая помощь будет оценена по достоинству.

ответ

0

Я не тестировал его, но вы могли бы использовать столбец _id вашего запроса для сопоставления своих значений со списком и последующего связывания данных.

private HashMap<Long, String> items = new HashMap<Long, String>(); // this will map the ids from the cursor to the values in the ArrayList 
//get the cursor Cursor cursor = the query and then map the values: 
int tmp = 0; 
while (mc.moveToNext()) { 
    items.put(mc.getLong(mc.getColumnIndex("_id")), extra.get(tmp)); //or replace _id with your ID column from the query 
    tmp++; 
} 

Затем передайте этот HashMap в пользовательский конструктор адаптера:

private HashMap<Long, String> extraStuff; 

    public YourCursorAdapter(Context context, int layout, Cursor c, 
        String[] from, int[] to, HashMap<Long, String> extraSutff) { 
     // stuff 
     this.extraStuff = extraStuff; 
} 

и связать значения в bindView() метода:

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    TextView top = (TextView) view.findViewById(R.id.toptext); 
    top.setText(cursor.getString(cursor.getColumnIndex(THE_COLUMN_FOR_THE_FIRST_TEXTVIEW))); 
    TextView bottom = (TextView) view.findViewById(R.id.bottomtext); 
    bottom.setText(extraStuff.get(cursor.getLong(cursor.getColumnIndex(THE_ID_COLUMN_FROM_THE_QUERY)))); 
} 

Примечание: Я не знаю, насколько эффективно это будет, если у вас много строк в курсоре.