使用SQLite填充ListView

时间:2014-02-28 16:07:46

标签: android listview android-sqlite

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

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

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类中,我有以下代码片段:

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
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

由于您使用的是SQLite,我建议您使用SQLiteOpenHelper。通常,您从Android API继承此类,然后使用它来实现ContentProviderContentProvider子类会将Cursor传递给您的应用,CursorAdapter可以使用SimpleCursorAdapter。我建议你从CursorLoader开始,然后从那里进行自定义。您还应该了解允许您在单独的线程上从数据库加载数据的{{1}}。有关详细信息,请查看http://developer.android.com/guide/topics/ui/layout/listview.html