这是我的问题,我会尽量一步一步地解释。在我开始之前,我需要说我是第一次使用领域数据库。
现在我一步一步来,我将尝试解释我在我的应用程序中所做的事情:
在我的活动中,我在工具栏中有菜单项。根据我单击的菜单项,我在 Realm Results 中加载数据并使用 RecycleView 显示项目。
我使用此代码加载结果,最后我在数据库上添加了侦听器,因此如果发生更改,侦听器将更新所有内容:
private void loadResults(int filterOption) {
provjeraHomeIliTrash = 1;
switch (filterOption) {
case Filter.CALENDAR_VISIBILITY:
mResults = mRealm.where(Drop.class).equalTo("deleted", false).findAllAsync();
break;
case Filter.NONE:
mResults = mRealm.where(Drop.class).equalTo("deleted", false).findAllAsync();
break;
case Filter.SEVENDAYS: //logika.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long start = calendar.getTimeInMillis() - 1 * 60 * 60 * 1000;
long end = start + 7 * 24 * 60 * 60 * 1000;
mResults = mRealm.where(Drop.class).greaterThan("when", start).lessThan("when", end).equalTo("deleted", false).equalTo("completed", false).findAllSortedAsync("when");
break;
case Filter.LEAST_TIME_LEFT:
mResults = mRealm.where(Drop.class).equalTo("deleted", false).findAllSortedAsync("when");
break;
case Filter.MOST_TIME_LEFT:
mResults = mRealm.where(Drop.class).equalTo("deleted", false).findAllSortedAsync("when", Sort.DESCENDING);
break;
case Filter.COMPLETE:
mResults = mRealm.where(Drop.class).equalTo("completed", true).equalTo("deleted", false).findAllAsync();
break;
case Filter.INCOMPLETE:
mResults = mRealm.where(Drop.class).equalTo("completed", false).equalTo("deleted", false).findAllAsync();
break;
case Filter.BLACK:
mResults = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_black).equalTo("deleted", false).findAllSortedAsync("when");
break;
case Filter.RED:
mResults = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_red).equalTo("deleted", false).findAllSortedAsync("when");
break;
case Filter.BLUE:
mResults = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop).equalTo("deleted", false).findAllSortedAsync("when");
break;
case Filter.YELLOW:
mResults = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_yellow).equalTo("deleted", false).findAllSortedAsync("when");
break;
case Filter.GREEN:
mResults = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_green).equalTo("deleted", false).findAllSortedAsync("when");
break;
case Filter.WHITE:
mResults = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_white).equalTo("deleted", false).findAllSortedAsync("when");
break;
}
if (filterOption == Filter.CALENDAR_VISIBILITY) {
//do nothing
} else {
mResults.addChangeListener(mChangeListener); //adding listener to database
}
}
在此之后,当我单击 RecycleView 项目时,我使用此代码打开对话框片段,并将领域和领域结果发送到对话框片段:
//Show dialog
private void showDialogNote(int position) {
DialogNote dialog = new DialogNote();
Bundle bundle = new Bundle(); //saving position to
bundle.putInt("POSITION", position);
dialog.setArguments(bundle); //saving position of clicked recycleview item.
dialog.setChangeNoteListener(mChangeNoteListener, mResults, mRealm); //sending to dialog Change listener Realm and Realm Results
dialog.show(getSupportFragmentManager(), "Mark");
}
现在,对话框片段打开并使用以下代码接收领域结果和领域实例:
public void setChangeNoteListener(ChangeNoteListener mChangeNoteListener, RealmResults<Drop> realmResults, Realm realm) {
mNotelistener = mChangeNoteListener;
mRealmResolts = realmResults;
mRealm = realm;
}
在此之后,我使用来自 mRealmResults 的数据填充对话框片段。到目前为止一切都很好。
现在问题开始了:
我尝试旋转屏幕,在旋转屏幕之前我调用 onSaveInstanceState() 并保存一些内容,以便 saveinstantestate 不为空。
@Override
public void onSaveInstanceState(Bundle outState) {
boolean screenRotation = true;
outState.putBoolean("myRotation", screenRotation); //i just put something but do not use
super.onSaveInstanceState(outState);
}
现在,屏幕旋转,我使用相同的排序参数重新创建 mRealmResults,但它们的顺序与旋转前的顺序不同。当我旋转屏幕时,mRealmResults 的顺序与以前不同。旋转后,对话帧被填充了一些其他位置的不同数据。这是代码:
if (savedInstanceState != null) {
mRealm = Realm.getDefaultInstance();
Log.d("realmtest", "realmtest: prvi");
int filterOption = AppBucketDrops.load(getActivity()); //loading from shared preference
if (filterOption == Filter.NONE) {
mRealmResolts = mRealm.where(Drop.class).equalTo("deleted", false).findAllAsync(); //Trazimo sve iteme normalno kako su dodavani
} else if (filterOption == Filter.SEVENDAYS) {
Calendar calendar = Calendar.getInstance();// getInstance method returns a Calendar object whose calendar fields have been initialized with the current date and time. Imamo 2 vrste Calendar klase, ne funkcioniraju obe
calendar.set(Calendar.HOUR_OF_DAY, 0); //setiramo sate na 0 da se racuna od polnoci
calendar.set(Calendar.MINUTE, 0); //setiramo minute na 0 da se racuna od polnoci
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0); //setiramo sekunde na 0 da se racuna od polnoci
long start = calendar.getTimeInMillis() - 1 * 60 * 60 * 1000; //sada dohvatimo svo to vrijeme u milisekunde iz calendara do polnoci
long end = start + 7 * 24 * 60 * 60 * 1000; //trenutno vrijeme + 7 dana
mRealmResolts = mRealm.where(Drop.class).greaterThan("when", start).lessThan("when", end).equalTo("deleted", false).equalTo("completed", false).findAllSortedAsync("when");
} else if (filterOption == Filter.LEAST_TIME_LEFT) {
mRealmResolts = mRealm.where(Drop.class).equalTo("deleted", false).findAllSortedAsync("when");
} else if (filterOption == Filter.MOST_TIME_LEFT) {
mRealmResolts = mRealm.where(Drop.class).equalTo("deleted", false).findAllSortedAsync("when", Sort.DESCENDING);
} else if (filterOption == Filter.COMPLETE) {
mRealmResolts = mRealm.where(Drop.class).equalTo("completed", true).equalTo("deleted", false).findAllAsync();
} else if (filterOption == Filter.INCOMPLETE) {
mRealmResolts = mRealm.where(Drop.class).equalTo("completed", false).equalTo("deleted", false).findAllAsync();
} else if (filterOption == Filter.BLACK) {
mRealmResolts = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_black).equalTo("deleted", false).findAllSortedAsync("when");
} else if (filterOption == Filter.RED) {
mRealmResolts = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_red).equalTo("deleted", false).findAllSortedAsync("when");
} else if (filterOption == Filter.BLUE) {
mRealmResolts = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop).equalTo("deleted", false).findAllSortedAsync("when");
} else if (filterOption == Filter.YELLOW) {
mRealmResolts = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_yellow).equalTo("deleted", false).findAllSortedAsync("when");
} else if (filterOption == Filter.GREEN) {
mRealmResolts = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_green).equalTo("deleted", false).findAllSortedAsync("when");
} else if (filterOption == Filter.WHITE) {
mRealmResolts = mRealm.where(Drop.class).equalTo("colorPickerRoudIcon", R.drawable.ic_drop_white).equalTo("deleted", false).findAllSortedAsync("when");
}
buttonWhenSaveVisibility(); //changing button visibility
setTitleNoteTextToDialogNote(); //populate views with data from mResults
} else {
buttonWhenSaveVisibility(); //changing button visibility
setTitleNoteTextToDialogNote(); //populate views with data from mResults
}