Android: отображение нескольких частей курсорных данных вместе в TextViews вместо ListView - PullRequest
0 голосов
/ 13 октября 2018

Я могу выполнить выборку из случайного ряда различных индексов столбцов и заполнить ListView в моей основной активности данными, используя специальный ArrayAdapter (List<String>).Я хочу взять те же данные и использовать их для заполнения одного текстового представления (или LinearLayout, содержащего два TextViews) в основном действии.Что TextView (s) будет в следующем формате:

String Int: Int Entry

BookName Chapter #: Entry # Entry

IУ меня есть следующий код для извлечения моей случайной информации из базы данных SQLite, и он работает:

public List<String> getEntry() {
    List<String> list = new ArrayList<>();
    Cursor cursor = database.rawQuery("SELECT * FROM bookdatabase ORDER BY RANDOM() LIMIT 1", null);
    cursor.moveToFirst();
    while (cursor != null && cursor.getCount() > 0 & !cursor.isAfterLast()) {
        list.add(cursor.getString(3));
        list.add(cursor.getString(4));
        list.add(cursor.getString(5));
        list.add(cursor.getString(6));
        cursor.moveToNext();
    }
    cursor.close();
    return list;
}

Вот мой пользовательский адаптер, который работает для отображения данных в ListView:

 public EntryAdapter(Context context, int resource1, List<String> entries) {
    super(context, resource1, entries);
    mContext = context;
    mResource1 = resource1;
    mEntries = entries;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View listItem = convertView;
    if (listItem == null) {
        listItem = LayoutInflater.from(mContext).inflate(mResource1, parent, false);
    }
    TextView entryTextView = (TextView) listItem.findViewById(R.id.bookName);
    entryTextView.setText(mEntries.get(position));

    return listItem;
}

Здесь я пытаюсь получить доступ к нему из своей основной деятельности, чтобы заполнить TextView, который в настоящее время работает, чтобы показать его в ListView:

 databaseAccess.open();
    mEntry = databaseAccess.getEntry();
    databaseAccess.close();
    mEntryAdapter = new EntryAdapter(this, 
    R.layout.entry_item, mEntry);
    this.mEntryListView.setAdapter(mEntryAdapter);

Заранее спасибо.

1 Ответ

0 голосов
/ 14 октября 2018

После долгих исследований я решил свою проблему.В итоге я использовал информацию, содержащуюся в одном посте о стеке над потоком, а другой - на GitHub;оба о CursorAdapters.В итоге я создал адаптер курсора вместо адаптера массива, и он прекрасно работает.Сообщения здесь на случай, если кто-нибудь столкнется с этой же проблемой:

Адаптер курсора и пример sqlite

https://github.com/codepath/android_guides/wiki/Populating-a-ListView-with-a-CursorAdapter

...