【问题标题】:Populate ListView with SQLite使用 SQLite 填充 ListView
【发布时间】:2014-02-28 16:07:45
【问题描述】:

我正在创建一个应用程序,您可以在其中插入要执行的任务并对其进行修改。我目前可以在我创建的列表中查看任务,但是当我单击列表时,只显示标题,尽管其他条目没有显示。

在输入屏幕中,我有代码用以前的信息填充输入屏幕:

mSaveButton = (ImageButton) findViewById(R.id.diaryform_ib_save);
    Log.i(TAG,"Field Title: "+ mTitle);
    Intent showTitle = getIntent();
    String fieldTitle = showTitle.getStringExtra(Constants.DIARY_TITLE);
    Log.i(TAG,"Field Title 2: "+ fieldTitle);
    mTitle.setText(fieldTitle);

    Intent showEntry = getIntent();
    String fieldEntry = showEntry.getStringExtra(Constants.DIARY_ENTRY);
    mEntry.setText(fieldTitle);
    Log.i(TAG,"Field Entry: "+ mEntry);
    Log.i(TAG,"Field Entry 2: "+ fieldEntry);

我在那里有日志消息,所以我可以看到正在提供的信息。对于 fieldTitle,传递了标题,而对于 fieldEntry,传递了 null。当我创建两个 fieldTitle 时,两个字段都填充了标题。

在我的 ListActivity 类中,我有以下代码 sn-p:

diaryDAO = new DAO(this); //Creates an instance of the DAO
    Cursor diaryCursor = diaryDAO.queryDiary(Diary.DiaryItem.LIST_PROJECTION, null, null); 
    Log.i(TAG, "I get to here!");
    String[] diaryDataColumns = { Diary.DiaryItem.COLUMN_NAME_DIARY_TITLE,Diary.DiaryItem.COLUMN_NAME_DIARY_ENTRY }; 
    Log.i(TAG, "Also here");
    int[] viewIDs ={ R.id.textView1 }; 
    Log.i(TAG, "Diary Data Col" +diaryDataColumns);
    Log.i(TAG, "I'm here");

    //Creates backing adapter for the ListView
    @SuppressWarnings("deprecation") s
    SimpleCursorAdapter diaryAdapter= new SimpleCursorAdapter(
              this,                            
              R.layout.activity_diary_list,     
              diaryCursor,                     
              diaryDataColumns,                     
              viewIDs                       
      );
    Log.i(TAG, "Now im here");

    this.setListAdapter(diaryAdapter);

在我创建 diaryDataColumns 字符串的地方我尝试添加了 Diary.DiaryItem.COLUMN_NAME_DIARY_ENTRY,但当我将 Diary.DiaryItem.COLUMN_NAME_DIARY_TITLE 更改为 ENTRY 列表视图并且条目显示给定条目时,它不会显示在条目屏幕中.

有什么想法吗?对我做错了什么有点困惑。

谢谢

编辑:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    Intent openItem = new Intent(this, DiaryEntryActivity.class); 
    Cursor listCursor = (Cursor)l.getAdapter().getItem(position); 
    openItem.putExtra(Constants.DIARY_TITLE, listCursor.getString(1)); 
    startActivity(openItem); //Starts the intent actions
}

【问题讨论】:

  • 您不需要多次调用getIntent,您如何将数据作为额外的数据放入intent,从其他活动中,向我们展示代码

标签: android listview android-sqlite


【解决方案1】:

在我看来,您提供了两列,但只有一个文本视图。第一个给定的列数据将填充到文本视图中,但我认为,第一列中没有数据,但您的第二列包含数据,当您切换它们时,该数据将填充到文本视图中。用两个 textView 试一试。 但我认为与内容提供商合作是一种有效的方式,vogella.com 上有一个很好的教程。

【讨论】:

    【解决方案2】:

    由于您使用的是 SQLite,我建议您使用SQLiteOpenHelper。通常,您从 Android API 子类化此类,然后使用它来实现 ContentProviderContentProvider 子类反过来将Cursors 传递给您的应用程序,CursorAdapter 可以使用它。我建议您从SimpleCursorAdapter 开始,然后从那里自定义它。您还应该了解CursorLoaders,它允许您在单独的线程上从数据库加载数据。更多详情请查看http://developer.android.com/guide/topics/ui/layout/listview.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多