Android - 如何使自定义适配器像简单数组适配器一样显示数据但带有编号行?

Android - How to make Custom Adapter Display Data like Simple Array Adapter but with numbered rows?

我正忙于 Android 的一本书 reader 项目。我正在使用 SQLite 数据库。为了根据 switch/case 从某些章节中获取某些条目,我使用了一个意图 putextra/getextra,它可以很好地获取条目并填充标准数组适配器。但是,我需要编号的项目。

我创建了一个自定义适配器 (EntryAdapter) 来显示行号,如下所示:

  1. 条目
  2. 条目
  3. 条目 依此类推...在列表视图中

问题是客户适配器一遍又一遍地将整个章节传递给每个列表项视图。如果没有客户适配器(并使用带有标准 simple_list_item 的标准数组适配器),它会按预期为每个列表项传递一行,但是,我需要编号的行...因此自定义适配器...如何让条目正确通过...每个列表项只有一个条目,同时仍然对行进行编号?任何帮助将不胜感激。

这是填充列表视图的 Activity 示例...

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;
    }
}

我用这个修复了它:

verseTextView.setText(String.valueOf(位置)+ mChapterEntries.get(位置));

而不是这个:

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

希望对其他人有所帮助。