【问题标题】:ListAdapter add just one type of data in ListViewListAdapter 在 ListView 中只添加一种类型的数据
【发布时间】:2016-01-12 11:24:52
【问题描述】:

有人可以帮我解决这个问题吗?我有两个光标项目。

  • 一个获取时间数据
  • 还有一个从数据库中获取任务名称。

但它只在 ListView 中设置任务。当我删除任务光标时,它会设置时间,但不能同时设置两者。

我想要这个作为列表:时间 - 任务名称

这是它的代码部分:

public void updateUI() {
    helper = new TaskDBHelper(MainActivityPhone.this);
    SQLiteDatabase sqlDB = helper.getReadableDatabase();

    Cursor cursor = sqlDB.query(TaskContract.TABLE,
            new String[]{TaskContract.Columns._ID, TaskContract.Columns.TIME},
            null, null, null, null, TaskContract.Columns.TIME + " ASC");

    Cursor cursor2 = sqlDB.query(TaskContract.TABLE,
            new String[]{TaskContract.Columns._ID, TaskContract.Columns.TASK},
            null, null, null, null, TaskContract.Columns.TIME + " ASC");

    listAdapter = new SimpleCursorAdapter(
            this, R.layout.task_view,cursor,
            new String[]{TaskContract.Columns.TIME, TaskContract.Columns.TASK},
            new int[]{R.id.timeTextView, R.id.taskTextView},
            0
    );



  //  Log.v("Cursor Object", DatabaseUtils.dumpCursorToString(cursor));

 /*   Cursor cursor2 = sqlDB.query(TaskContract.TABLE,
            new String[]{TaskContract.Columns._ID, TaskContract.Columns.TASK},
            null, null, null, null, TaskContract.Columns.TIME + " ASC");


  listAdapter = new SimpleCursorAdapter(
            this,
            R.layout.task_view,
            cursor2,
            new String[]{TaskContract.Columns.TASK},
            new int[]{R.id.taskTextView},
            0
    );*/

    ListView listView = (ListView) findViewById(R.id.list);
    listView.setAdapter(listAdapter);





}

【问题讨论】:

  • 你可以自己创建 cursoradapter,看这个:stackoverflow.com/questions/5300787/…
  • 我相信您必须为此制作一个自定义适配器,因为SimpleCursorAdapter 一次只需要一个Cursor。因此,当适配器只有一个 Cursor 可用时,您无法显示来自另一个 Cursor 的数据。
  • 使用投影columns like TaskContract.Columns._ID, TaskContract.Columns.TIME, TaskContract.Columns.TASK

标签: java android android-layout listview


【解决方案1】:

你可以做的几件事:

  • 创建自己的游标适配器,这样您就可以传递 2 个游标,并根据需要显示数据。

  • 将游标与您需要的数据合二为一,这样您就可以使用标准适配器了。

  • 将光标组合到一个字符串数组中。因此您将获得所需的数据并将其保存在字符串中,例如:时间 - 任务名称。然后使用 ArrayAdapter 填充 ListView。

如果您稍微搜索一下,我认为所有这 3 种方法都有足够的代码。我认为问题在于当前适配器没有组合两个表的逻辑。

【讨论】:

    【解决方案2】:

    @Kezufru 的回答是正确的。 在您的情况下,您似乎可以从他的回答中尝试第二个选项。试试这样的:

    public void updateUI() {
        helper = new TaskDBHelper(MainActivityPhone.this);
        SQLiteDatabase sqlDB = helper.getReadableDatabase();
    
        Cursor cursor = sqlDB.query(TaskContract.TABLE,
            new String[]{TaskContract.Columns._ID, TaskContract.Columns.TIME, TaskContract.Columns.TASK},
            null, null, null, null, TaskContract.Columns.TIME + " ASC");
    
    
        listAdapter = new SimpleCursorAdapter(
            this, R.layout.task_view,cursor,
            new String[]{TaskContract.Columns.TIME, TaskContract.Columns.TASK},
            new int[]{R.id.timeTextView, R.id.taskTextView},
            0
    );
    ListView listView = (ListView) findViewById(R.id.list);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      相关资源
      最近更新 更多