簡體   English   中英

片段在最后一個片段后面可見並繼續

[英]Fragment visible behind last fragment and goes on

在活動中具有導航抽屜,並通過這些代碼行更改片段

switch (menuItem.getItemId()) {
case R.id.home:
    menuItem.setChecked(true);
    drawerLayout.closeDrawer(GravityCompat.START);
    if (getSupportFragmentManager().findFragmentByTag("ranking") == null) {
        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.list_view_container, new HomeFragment(),
                        "ranking")
                .addToBackStack("ranking")
                .setTransition(
                        FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .commit();
    } else {
        getSupportFragmentManager().popBackStack("ranking", 0);
    }
    return true;
case R.id.current_event:
    menuItem.setChecked(true);
    drawerLayout.closeDrawer(GravityCompat.START);
    if (getSupportFragmentManager().findFragmentByTag("ranking1") == null) {
        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.list_view_container, new CurrentEvents(),
                        "ranking1")
                .addToBackStack("ranking1")
                .setTransition(
                        FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .commit();
    } else {
        getSupportFragmentManager().popBackStack("ranking1", 1);
    }
    return true;
}

我希望片段保留在內存中,這樣就不應該一次又一次地重建它,而不能一次又一次地從Internet上獲取數據,所以我已經采用了上述方法來實現這一點,但是現在,當我通過導航抽屜更改片段時,一個片段正在替換另一個繼續,我還必須按返回按鈕=創建新片段以退出應用程序的次數。 我想要Backstack中的片段,但不希望這樣互相替換。 我一次只想要一種方法。 請幫忙

由於您使用的是add() ,因此以前的Fragment不會從容器中刪除。

您應該使用replace()add()的調用。 例如, case R.id.home將變為:

getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.list_view_container, new HomeFragment(),
            "ranking")
    .addToBackStack("ranking")
    .setTransition(
            FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
    .commit();

我希望Fragment保留在內存中,這樣就不會一次又一次地重建它,而一次又一次地從Internet上獲取數據。

您可以嘗試使用FragmentsetRetainInstance(true)來執行此操作,但不建議這樣做(而且我從未使用過)。

另一種更合適的方法是使用FragmentonSaveInstanceState() 您可以在Developer Android上了解它。

您可以檢查此方案,希望它可以解決您的問題:-

嘗試從FragmentTransaction附加和分離片段。 當您移至下一個片段時,從FragmentTransaction分離最后一個片段,而當您想再次使用它時,請附加它。

請參閱示例代碼,了解如何分離和附加片段,它將為您提供幫助:

android.support.v4.app.FragmentManager fm =   getSupportFragmentManager();
                AndroidFragment androidFragment = (AndroidFragment) fm.findFragmentByTag("android");
                AppleFragment appleFragment = (AppleFragment) fm.findFragmentByTag("apple");
                android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();

                /** Detaches the androidfragment if exists */
                if(androidFragment!=null)
                    ft.detach(androidFragment);

                /** Detaches the applefragment if exists */
                if(appleFragment!=null)
                    ft.detach(appleFragment);

                /** If current tab is android */
                if(tabId.equalsIgnoreCase("android")){

                    if(androidFragment==null){
                        /** Create AndroidFragment and adding to fragmenttransaction */
                        ft.add(R.id.realtabcontent,new AndroidFragment(), "android");
                    }else{
                        /** Bring to the front, if already exists in the fragmenttransaction */
                        ft.attach(androidFragment);
                    }

                }else{    /** If current tab is apple */
                    if(appleFragment==null){
                        /** Create AppleFragment and adding to fragmenttransaction */
                        ft.add(R.id.realtabcontent,new AppleFragment(), "apple");
                     }else{
                        /** Bring to the front, if already exists in the fragmenttransaction */
                        ft.attach(appleFragment);
                    }
                }
                ft.commit();

 `For Reference see this onTabChanged :` [http://wptrafficanalyzer.in/blog/creating-navigation-tabs-using-tabhost-and-fragments-in-android/][1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM