SORU
28 EYLÜL 2011, ÇARŞAMBA


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

  • onActivityCreatedListFragment veritabanı açın ve ListFragment bunu kapatmak için onDestroy 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 gibi onLoadFinished 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
6 Aralık 2011, Salı


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 :-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • HSmasteryoda .

    HSmasteryoda

    22 Ocak 2010
  • Showtime

    Showtime

    21 HAZİRAN 2006