Android - Как сделать так, чтобы пользовательский адаптер отображал данные, такие как простой массив, но с нумерованными строками? - PullRequest
0 голосов
/ 03 октября 2018

Я занят проектом чтения книг для Android.Я использую базу данных SQLite.Чтобы получить определенные записи из определенных глав в зависимости от switch / case, я использую намерение putextra / getextra, которое прекрасно работает, чтобы получить только записи и заполнить стандартный адаптер массива.Тем не менее, мне нужны элементы пронумерованы.

Я создал специальный адаптер (EntryAdapter) для отображения номеров строк следующим образом:

  1. запись
  2. запись
  3. запись и т. Д.... в представлении списка

Проблема заключается в том, что клиентский адаптер снова и снова передает всю главу каждому представлению элемента списка.Без пользовательского адаптера (и с использованием стандартного адаптера массива со стандартным simple_list_item) он пропускает одну строку на элемент списка, как и положено, однако мне нужны строки с нумерацией ... таким образом, пользовательский адаптер ... Как получитьзаписи для прохождения должным образом ... только одна запись на элемент списка, при этом строки все еще пронумерованы?Любая помощь будет принята.

Вот пример действия, которое заполняет представление списка ...

public class ChapterActivity extends AppCompatActivity{

private ListView mListView;
private EntryAdapter mAdapter;
static List<String> mChapterEntries;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chapter_entries);
    this.mListView = (ListView) findViewById(R.id.listView);

    Integer chapterSelectedOne =  getIntent().getIntExtra("chapter", 0);
    final DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);

    switch (chapterSelectedOne) {

        case 0:
            databaseAccess.open();
            mChapterEntries = databaseAccess.getEntriesChapterOne();
            databaseAccess.close();
            mAdapter = new EntryAdapter(this, R.layout.entry_list_item, mChapterEntries);
            this.mListView.setAdapter(mAdapter);

            break;

        case 1:

            databaseAccess.open();
            mChapterEntries = databaseAccess.getEntriesChapterTwo();
            databaseAccess.close();
            mAdapter = new EntryAdapter(this, R.layout.entry_list_item, mChapterEntries);
            this.mListView.setAdapter(mAdapter);

            break;

        case 2:

            databaseAccess.open();
            mChapterEntries = databaseAccess.getEntriesChapterThree();
            databaseAccess.close();
            mAdapter = new EntryAdapter(this, R.layout.entry_list_item, mChapterEntries);
            this.mListView.setAdapter(mAdapter);

            break;

        case 3:

            databaseAccess.open();
            mChapterEntries = databaseAccess.getEntriesChapterFour();
            databaseAccess.close();
            mAdapter = new EntryAdapter(this, R.layout.entry_list_item, mChapterEntries);
            this.mListView.setAdapter(mAdapter);

            break;

Это пользовательский адаптер "EntryAdapter" ....

    class EntryAdapter extends ArrayAdapter<String> {

    public EntryAdapter(Context context, int layout, List<String> 
    mChapterEntries) {
        super(context, R.layout.entry_list_item, mChapterEntries);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull 
    ViewGroup parent) {
        View listItem = convertView;
        int pos = position +1;
        if(listItem == null)
            listItem = 
   LayoutInflater.from(getContext()).inflate(R.layout.entry_list_item, 
   parent, false);
        TextView entryTextView = (TextView) 
   listItem.findViewById(R.id.chapterEntries);
        verseTextView.setText(String.valueOf(pos)+ mChapterEntries);

        return listItem;
    }
}

1 Ответ

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

Я исправил это, используя это:

verseTextView.setText (String.valueOf (pos) + mChapterEntries.get (position));

вместо этого:

verseTextView.setText (String.valueOf (pos) + mChapterEntries);

Надеюсь, что это поможет кому-то еще.

...