0

这是我的问题,我会尽量一步一步地解释。在我开始之前,我需要说我是第一次使用领域数据库。

现在我一步一步来,我将尝试解释我在我的应用程序中所做的事情:

在我的活动中,我在工具栏中有菜单项。根据我单击的菜单项,我在 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
        }
4

0 回答 0