-1

onCreate()を使用するメソッドがありdatasource.open()ますdatasource.close()datasource.close();の最後に問題が発生した場合onCreate()、ListViewSimpleCursorAdapterは常に空白になります。

ListViewdatasource.close();の最後からを削除すると、データが入力されます。onCreate()

なぜそうなのか、私は一生理解できません。

なぜこれが起こるのかについてのドキュメントはありますか?

サンプルコード:

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);

    Bundle extras = getIntent().getExtras();
    id = extras.getLong("extraID");

    setContentView(R.layout.main);

    datasource = new SMSDataSource(this);
    datasource.open();

    Cursor groupCursor = datasource.queryByGroup(long id);

    contactAdapter = new SimpleCursorAdapter(this,
            android.R.layout.simple_list_item_2, // Use a template
            // that displays a
            // text view
            getCur, // Give the cursor to the list adapter
            new String[] { DBManagement.CONTACTS_COLUMN_NAME,
            DBManagement.CONTACTS_COLUMN_NUMBER }, // Map the NAME
            // column in the
            // people database to...
            layouts); // The "text1" view defined in
    // the XML template

    list = (ListView) findViewById(android.R.id.list);
    list.setAdapter(contactAdapter);

    registerForContextMenu(list);

    groupCursor.close();
    datasource.close();
}
4

2 に答える 2

1

カーソルを手動で管理したい場合はdeactiveate()、アクティビティonStopを呼び出してrequery()から再開する必要があります。

ただしActivity.startManagingCursor()、これを処理するものを使用するだけです。このメソッドは非推奨としてマークされているため、Google が推奨するとおりに処理したい場合は、CursorLoaderclass を使用してカーソルを非同期的に処理することをお勧めします。率直に言って、データベースが非常に大きく、および/またはクエリの実行が非常に遅い場合を除き、非推奨の方法を使用しても害はありません。しばらくの間はどこにも行きません。

于 2012-07-29T16:20:27.717 に答える
0

実際には、メソッド呼び出しは、またはメソッドのdatasource.close()どこかに配置する必要があると思います.しかし、必要ではありません.コードスニペットを投稿していただければ、より正確な回答を提供できます..onPause()onStop()onDestroy

于 2012-07-29T07:29:06.207 に答える