我正在尝试使用vogella的android中sqlite教程的指导在android中显示一个列表:
这是我的ProjectListDataSource类的一部分(这从sqlite数据库获取所有数据):
public List<ProjectList> getAllProjects() {
List<ProjectList> projects = new ArrayList<ProjectList>();
Cursor cursor = database.query(ProjectListHelper.TABLE_PROJECT_LIST,
allColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
projects.add(cursorToProjectList(cursor));
cursor.moveToNext();
}
// make sure to close the cursor
cursor.close();
return projects;
}
private ProjectList cursorToProjectList(Cursor cursor) {
ProjectList projList = new ProjectList();
projList.setId(cursor.getLong(0));
projList.setProjName(cursor.getString(1));
projList.setProjComment(cursor.getString(2));
projList.setProjDateTime(cursor.getString(3));
return projList;
}
这是我的活动课程:
public class ProjectListActivity extends ListActivity implements
OnClickListener {
private static final String TAG = "ProjectListActivity";
private ProjectListDataSource datasource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_projectlist);
Log.d(TAG, "On Creat'd");
init();
}
private void init() {
// Getting data from database and adding to ListView
datasource = new ProjectListDataSource(this);
datasource.open();
List<ProjectList> values = datasource.getAllProjects();
ArrayAdapter<ProjectList> adapter = new ArrayAdapter<ProjectList>(this,
android.R.layout.simple_list_item_activated_1, values);
setListAdapter(adapter);
}
但是在这样做的时候我会得到意想不到的结果(见图):
http://i.imgur.com/tQMooi8.png
但数据库有这样的记录(见图):
http://i.imgur.com/HfY2azs.png
任何人都可以解释并提供一个解决方案,以解释为什么我无法获得列表视图以显示数据库中的记录......
谢谢, Viney
答案 0 :(得分:1)
基本适配器(如ArrayAdapter或CursorAdapter)只会将一个值映射到单个视图。这里是ProjectList
对象,其ID为android.R.id.simple_list_item_activated_1
您需要一个单一的布局(对于ListView中的单个视图),其中包含多个视图,您将映射id,名称,日期,注释等。您需要扩展其中一个适配器。优选BaseAdapter或CursorAdapter。
答案 1 :(得分:0)
此处有几个问题,具体取决于您要显示的内容。
您在列表中看到对象字符串引用的原因是因为您使用的是普通ArrayAdapter
,它只是在数组中的对象上调用toString()
。如果在ProjectList中覆盖toString()
,则可以显示所需内容(尽管这通常不是解决此问题的最佳方法)。
允许您继续使用普通ArrayAdapter
的另一个选项是从要显示的数据的ProjectList对象创建字符串数组。有点浪费,但这是另一种选择。
您通常要做的是扩展ArrayAdapter
并覆盖getView()
。在getView()
中,您可以分配要在视图中显示的数据。
如果要在单个列表项中显示ProjectList对象中的所有数据,则还需要创建一个自定义布局来表示该行。