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) 来显示行号,如下所示:
- 条目
- 条目
- 条目
依此类推...在列表视图中
问题是客户适配器一遍又一遍地将整个章节传递给每个列表项视图。如果没有客户适配器(并使用带有标准 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);
希望对其他人有所帮助。
我正忙于 Android 的一本书 reader 项目。我正在使用 SQLite 数据库。为了根据 switch/case 从某些章节中获取某些条目,我使用了一个意图 putextra/getextra,它可以很好地获取条目并填充标准数组适配器。但是,我需要编号的项目。
我创建了一个自定义适配器 (EntryAdapter) 来显示行号,如下所示:
- 条目
- 条目
- 条目 依此类推...在列表视图中
问题是客户适配器一遍又一遍地将整个章节传递给每个列表项视图。如果没有客户适配器(并使用带有标准 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);
希望对其他人有所帮助。