0

コンテンツ プロバイダーを使用して、データベースのデータを表示しています。コンテンツは ListActivity に表示されます。電話の向きを変更すると、データがリロードされず、空の ListView が表示されることがあります。その理由は何ですか?それは約4〜5回ごとに発生します... 3つのアイテムを持つアクションバースピナーがあります:すべてを表示、日付を表示、場所を表示これはデータベースにクエリを実行してサブセットのみを表示します

public class MainActivity extends ListActivity {
private  Cursor mCursor = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mSimpleCursorAdapter = new SpecialAdapter(this, 
        R.layout.row,
        null,
        PROJECTION,
        new int[] { R.id.titleID, R.id.dateTimeOrLocationID1 , R.id.dateTimeOrLocationID2 },
        CursorAdapter.NO_SELECTION);

   //mListView = (ListView) findViewById(android.R.id.list);
   //mListView.setAdapter(mSimpleCursorAdapter);
   setListAdapter(mSimpleCursorAdapter);
   mOnNavigationListener = new OnNavigationListener() {

      @Override
      public boolean onNavigationItemSelected(int position, long itemId) {

          switch(position) { 
          case 0:
              mCursor = getContentResolver().query(ReminderContentProvider.CONTENT_URI, PROJECTION, null, null, null);
              break;
          case 1:
              mCursor = getContentResolver().query(ReminderContentProvider.CONTENT_URI, PROJECTION, " Date NOT NULL", null, null);
              break;
          case 2:
              mCursor = getContentResolver().query(ReminderContentProvider.CONTENT_URI, PROJECTION, " Address NOT NULL", null, null);
              break;
          default:
              break;
          }
        getLoaderManager().restartLoader(0, null, MainActivity.this);
        return true;
      }
    };
}

@Override
 public void onResume() {
    super.onResume();
    getLoaderManager().restartLoader(0,  null,  this);
}

@Override
public void onStart() {
    int showWhat = prefs.getInt(Utils.PREF_SHOW_ALL_DATE_OR_ADDRESS, 1);
    VisibilitySelection enumValue = VisibilitySelection.values()[showWhat-1];

    switch (enumValue) {
    case SHOW_ALL:
        mShowProperty = VisibilitySelection.SHOW_ALL;
        break;
    case SHOW_DATE_TIME:
        mShowProperty = VisibilitySelection.SHOW_DATE_TIME;
        break;
    case SHOW_ADDRESS:
        mShowProperty = VisibilitySelection.SHOW_ADDRESS;
        break;
    default:
        mShowProperty = VisibilitySelection.SHOW_ALL;
        break;
    }
    getLoaderManager().restartLoader(0, null, this);
}

@Override
 public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    CursorLoader loader = null;
    switch(mShowProperty) {
   case SHOW_ALL:
        loader = new CursorLoader(this, ReminderContentProvider.CONTENT_URI, PROJECTION, null, null, null);
        break;
    case SHOW_DATE_TIME:
        loader = new CursorLoader(this, ReminderContentProvider.CONTENT_URI, PROJECTION, " Date NOT NULL", null, null);
        break;
    case SHOW_ADDRESS:
        loader = new CursorLoader(this, ReminderContentProvider.CONTENT_URI, PROJECTION, " Address NOT NULL", null, null);
        break;
    }
    return loader;
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mSimpleCursorAdapter.swapCursor(data);
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
    mSimpleCursorAdapter.swapCursor(null);
}
}
4

0 に答える 0