CursorLoader ile ListFragment en iyi uygulamalar SQLite veritabanı sorgu için?
Projemde Android Uyumluluk Kitaplığı kullanıyorum. Bu DevGuide (http://developer.android.com/reference/android/app/Fragment.html) açıklanan ve Hıristiyan içerik sağlayıcı olmadan kullanılmak yapılan basit bir CursorLoader (Usage CursorLoader without ContentProvider) kullanarak ListFragment kurdum.
Sorunerede benim ListFragment / üst Etkinlik, açık veritabanı gerekiyor, İmleci geri, Adaptör ve setListAdapter oluşturmak?
Benim app, TitlesFragment, DetailsFragment var, FragmentLayoutActivity, DetailsLayoutActivity.
En iyi uygulama
onActivityCreated
ListFragment veritabanı açın ve ListFragment bunu kapatmak içinonDestroy
Bu kod örneği aşağıdaki gibi@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Open database playersDatabaseHelper = new PlayersDBAdapter(getActivity()); playersDatabaseHelper.open(); getLoaderManager().initLoader(0, null, this); ... } @Override public void onDestroy() { super.onDestroy(); if (playersDatabaseHelper != null) { playersDatabaseHelper.close(); } }
veritabanı sorgu ve
onCreateLoader
, imleç dönüp kod örneği aşağıdaki gibionLoadFinished
Adaptör ve setListAdapter oluşturun@Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { // Now create and return a CursorLoader that will take care of // creating a Cursor for the data being displayed. return new MyCursorLoader(getActivity()) { @Override public Cursor loadInBackground() { playersCursor = playersDatabaseHelper.getAllPlayers(); return playersCursor; } }; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { // Create an empty adapter we will use to display the loaded data. playersAdapter = new RowAdapter(getActivity(), playersCursor, R.layout.players_overview_row); // Allocate the adapter to the List displayed within this fragment. setListAdapter(playersAdapter); playersAdapter.swapCursor(cursor); // The list should now be shown. if (isResumed()) { setListShown(true); } else { setListShownNoAnimation(true); } }
Doğru yolda mıyım, yoksa bir yerlerden devam mı etmeliyim? Zaman ayırdığınız için teşekkürler!
CEVAP
Maalesef hiçbir deneyimi henüz ve Parça CursorLoader, ama ben zaten farklı konuları ve faaliyetleri ile eş zamanlı erişim bağlamında SQLiteOpenHelper kullanım deneyimli.
PlayersDBAdapter içten SQLiteOpenHelper sınıfı kullandığını varsayalım. ama yöntemlerin açık ne net değil() ve close() yapıyorsun?
Ben ne yaptım:
- bir olarak SQLiteOpenHelper tanımlayınuygulamageniş singleton, göründüğün gibi aktivite geniş değil
- örneğini SQLiteOpenHelper Uygulama onCreate içinde tek örnek
- Herhangi bir faaliyet onDestroy içinde SQLiteOpenHelper örnek serbest DEĞİL, bir aktivite yenisini hala DB açmak için olabilir
- SQLiteOpenHelper örnek uygulama onTerminate (onTerminate pratikte neredeyse hiç adı gibi emin değilim) temizlenmesi gerekiyor sanırım
- MySQLiteOpenHelper ile SQLiteDatabase bir referans alır DBAdapter nesne var.() getWritableDatabase
- bu DBAdapter genellikle aktivitenin onCreate tahsis ve onDestroy serbest bırakılır
En azından bu eserler, binlerce bir uygulama yok crashs kullanıcılar. Öneriler geldiniz geliştirmek için :-)
En iyi uygulamalar in-app veritabanı g...
Android SQLite için en iyi uygulamalar...
Nasıl Android programlı SQLite veritab...
Veritabanı sorgu Django: Nasıl tarih a...
Nasıl bir veritabanı yapısı almak için...