0

シングルトンをパターンとして使用してデータベースとしてSQLiteを使用するプロジェクトを完了します。アクティビティライフサイクルで選択クエリを1回実行します。

onCreateメソッドがアクティビティライフサイクルでトリガされるたびにselectクエリを実行したくないと思うのですが、設定が変更されたときやアクティビティが再作成されたときに、私が前にロードしたのと同じデータ。

私はコンテンツプロバイダを使用していません。私はローダーまたはCursorLoaderを使用することはできません。その方法はわかりません。

マイMainActivityコードは以下です:このアプローチは私のために新たになるよう

RecyclerView recyclerView; 
public Cursor cursor; 
InsectRecyclerAdapter insectAdapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(this); 

    cursor = DatabaseManager.getInstance(this).queryAllInsects("friendlyName"); //EVERY TIME THIS METHOD IS TRIGGER EXECUTE THE QUERY..AND I DON'T WANT THAT. 
    insectAdapter = new InsectRecyclerAdapter(this, cursor); 

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    recyclerView.setAdapter(insectAdapter); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
} 

私はいつもプロバイダとのSQLiteを使用しています。

提案がありますか?

+1

ローダを使用するためにContentProviderを使用する必要はありません。 –

+0

まあ... @GabeSechan私はContentLinkに欲しいことをできないので、AsyntTaskLoaderを使用しようとしています。しかし、まだモットワークはあります。 –

+0

'ContentProvider'を使用していなくても、' Loader'を実装することができます。ローダーは構成変更中にデータを保持します。 –

答えて

1

私はAsyncTaskLoaderを使用して作成しました。コードは次のとおりです。

public abstract class SimpleCursorLoader extends AsyncTaskLoader<Cursor> { 
    private Cursor mCursor; 
    public SimpleCursorLoader(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onStartLoading() { 
     //If the cursor is null call loadInBackground else deliverResult 
     if (mCursor != null) { 
      deliverResult(mCursor); 
     } 
     if (takeContentChanged() || mCursor == null) { 
      forceLoad(); 
     } 
    } 

    @Override 
    public Cursor loadInBackground(){ 
     mCursor = DatabaseManager.getInstance(MainActivity.this).queryAllInsects(MainActivity.FILTER); 
     return mCursor; 
    } 

    /* Runs on the UI thread */ 
    @Override 
    public void deliverResult(Cursor cursor) { 
     if (isReset()) { 
      // An async query came in while the loader is stopped 
      if (cursor != null) { 
       insectAdapter.swapCursor(cursor); 
      } 

      return; 
     } 
     mCursor = cursor; 
     if (isStarted()) { 
      super.deliverResult(cursor); 
     } 
    } 
} 
関連する問題