提供地址的Java/Android Arraylist
我正试图使用vogella的android中sqlite教程中的指南在android中显示一个列表: 这是我的ProjectListDataSource类的一部分(它从sqlite数据库获取所有数据):提供地址的Java/Android Arraylist,java,android,listview,arraylist,android-arrayadapter,Java,Android,Listview,Arraylist,Android Arrayadapter,我正试图使用vogella的android中sqlite教程中的指南在android中显示一个列表: 这是我的ProjectListDataSource类的一部分(它从sqlite数据库获取所有数据): public List getAllProjects(){ 列表项目=新建ArrayList(); Cursor Cursor=database.query(ProjectListHelper.TABLE\u PROJECT\u LIST, 所有列,null,null,null,null,nul
public List getAllProjects(){
列表项目=新建ArrayList();
Cursor Cursor=database.query(ProjectListHelper.TABLE\u PROJECT\u LIST,
所有列,null,null,null,null,null,null);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
添加(游标或项目列表(游标));
cursor.moveToNext();
}
//确保关闭光标
cursor.close();
返回项目;
}
专用项目列表光标或项目列表(光标){
ProjectList projList=新建项目列表();
projList.setId(cursor.getLong(0));
projList.setProjName(cursor.getString(1));
projList.setProjComment(cursor.getString(2));
projList.setProjDateTime(cursor.getString(3));
返回项目列表;
}
这是我的活动课:
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);
}
公共类ProjectListActivity扩展ListActivity实现
onclick侦听器{
私有静态最终字符串TAG=“ProjectListActivity”;
私有项目列表数据源数据源;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u项目列表);
Log.d(标签“On create'd”);
init();
}
私有void init(){
//从数据库获取数据并添加到ListView
数据源=新项目列表数据源(此);
datasource.open();
列表值=datasource.getAllProjects();
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_activated_1,值);
setListAdapter(适配器);
}
但在这样做的过程中,我得到了如下意想不到的结果(见图):
但数据库中有如下记录(见图):
有人能解释一下为什么我不能让列表视图显示数据库中的记录并给出解决方案吗
谢谢,
Viney基本适配器,如ArrayAdapter或CursorAdapter,将仅将一个值映射到单个视图。此处,
ProjectList
对象映射到id为android.R.id.simple\u list\u item\u activated\u 1的TextView
您需要一个布局(对于ListView中的单个视图),其中包含多个视图,您将映射id、名称、日期、注释等。您需要扩展其中一个适配器。最好是BaseAdapter或CursorAdapter。这里有几个问题,具体取决于您想要显示的内容
您在列表中看到对象字符串引用的原因是,您使用的是一个普通的ArrayAdapter
,它只是对数组中的对象调用toString()
。如果您在ProjectList中重写toString()
,您可以显示所需内容(尽管这通常不是解决此问题的最佳方法)
另一个允许您继续使用普通ArrayAdapter
的选项是从要显示的数据的ProjectList对象创建字符串数组。这有点浪费,但这是另一个选项
您通常要做的是扩展ArrayAdapter
并覆盖getView()
。在getView()
中,指定要在视图中显示的数据
如果您想在单个列表项中显示ProjectList对象中的所有数据,还需要创建一个自定义布局来表示行。您能给我举个例子,或者给我指一些在线资源来指导我这样做吗…谢谢。。
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);
}