【问题标题】:Android Fragment detachAndroid 片段分离
【发布时间】:2014-10-06 12:28:07
【问题描述】:

我有一个包含两个片段的活动。一个片段以纵向显示,另一个以横向模式显示。片段是用 java 添加的。

Fragment fragment = null;
        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            fragment = new FragmentPortrait();
        } else {
            fragment = new FragmentLandscape();
        }

        if (fragment != null) {
            addFragment(fragment, savedInstanceState == null);
        }

private void addFragment(Fragment fragment, boolean add) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();

        detachFragment("fragment");

        if (add) {
            fragmentTransaction.add(R.id.layoutForFragment, fragment,
                    "fragment");
        } else {
            fragmentTransaction.replace(R.id.layoutForFragment,
                    fragment, "fragment");
        }

        fragmentTransaction.commit();
    }

private void detachFragment(String fragmentTag) {
        Fragment fragment = getSupportFragmentManager().findFragmentByTag(
                fragmentTag);

        if (fragment != null) {
            Log.i(TAG, "detaching");
            getSupportFragmentManager().beginTransaction().remove(fragment)
                    .commit();
        }
    }

我的问题是,如果我在纵向模式下开始我的活动,并且当我旋转屏幕时,横向片段会按预期显示,但纵向片段中的 onActivityCreated 也会被调用。这意味着肖像片段仍然存在。你能告诉我我的错误在哪里吗?

【问题讨论】:

  • 您不需要手动分离碎片。尝试替换它们。

标签: android android-fragments android-fragmentactivity detach


【解决方案1】:

Keep it simple:: Replacing Fragment = Removing Current Fragment + Adding New Fragment


Sample:: saveInstance和其他东西修改你的需求


Boolean mFlag=false;
{
        Fragment fragment = null; 

        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        if(mFlag==false) 
            FragmentPortrait();
            mFlag=true; 
        } else { 
        if(mFlag==true)
            FragmentLandscape();
            mFlag=false;
        } 

        FragmentPortrait(){
         // Perform Action:: Replacing a fragment with the fragment you want to add in Portrait
        }

        FragmentLandscape(){
        // Perform Action:: Replacing a fragment with the fragment you want to add in Landscape
        }

} 

【讨论】:

  • 我之前没有分离方法,但注意到了这个问题并尝试了它,但它仍然不起作用..我会修复我的代码,但是当我改变时你能告诉我(对于例如)从纵向到横向为什么还要调用纵向的onActivityCreated?
  • @Crash-ID .... onActivityCreated 将被调用,因为片段被销毁并创建! .......但我不知道为什么OnOrientation从纵向变为横向为什么肖像的onActivityCreated也被称为........如果你想通过限制来防止这种尝试使用flags ...因为全局变量在OnOrientation类中没有被破坏,改变! ......检查编辑! .... 希望对您有所帮助 ...Note- 根据您的需要修改标志设置!
猜你喜欢
  • 2012-06-03
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多