【问题标题】:Java/Android Arraylist giving addressesJava/Android Arraylist 提供地址
【发布时间】:2013-10-25 22:17:01
【问题描述】:

我正在尝试使用 vogella's tutorial for sqlite in android 的指导在 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

谁能解释一下为什么我不能让列表视图显示数据库中的记录...

谢谢, 藤蔓

【问题讨论】:

    标签: java android listview arraylist android-arrayadapter


    【解决方案1】:

    基本适配器,如 ArrayAdapter 或 CursorAdapter,只会将一个值映射到单个视图。这里,一个ProjectList对象指向一个ID为android.R.id.simple_list_item_activated_1的TextView

    您需要一个带有多个视图的单一布局(对于 ListView 中的单个视图),您将映射 id、名称、日期、评论等。您需要扩展其中一个适配器。最好是 BaseAdapter 或 CursorAdapter。

    【讨论】:

    • 你能给我一个例子或者给我一些在线资源来指导我这样做......谢谢......
    【解决方案2】:

    这里有几个问题,具体取决于您要显示的内容。

    您在列表中看到对象字符串引用的原因是因为您使用的是普通的ArrayAdapter,它只是在数组中的对象上调用toString()。如果您在 ProjectList 中覆盖 toString(),则可以显示您想要的内容(尽管这通常不是解决此问题的最佳方法)。

    另一个允许您继续使用纯 ArrayAdapter 的选项是从您要显示的数据的 ProjectList 对象创建一个字符串数组。有点浪费,但这是另一种选择。

    您通常想要做的是扩展ArrayAdapter 并覆盖getView()。在getView() 中,您指定要在视图中显示的数据。

    如果您想在单个列表项中显示 ProjectList 对象中的所有数据,您还需要创建自定义布局来表示行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2014-10-19
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      相关资源
      最近更新 更多