碎片和方向变化碎片、方向

由网友(半成熟的幼稚鬼)分享简介:什么是正确的方式使用片段时,处理一个方向变化?我有一个包含2片景观布局(实例化code到的FrameLayout S)。当我切换到肖像模式(布局,其中只包含一个的FrameLayout 持有的左侧窗格中只),右手片段不再需要。我收到一个错误:E / AndroidRuntime(4519):java.lang.Ill...

什么是正确的方式使用片段时,处理一个方向变化?

我有一个包含2片景观布局(实例化code到的FrameLayout S)。当我切换到肖像模式(布局,其中只包含一个的FrameLayout 持有的左侧窗格中只),右手片段不再需要。

我收到一个错误:

  E / AndroidRuntime(4519):java.lang.IllegalArgumentException异常:由没有造成人员认为发现号0x7f060085的片段myFragment {418a2200#2 ID = 0x7f060085}
 

这是假设我的活动尝试重新连接的片段,其中它的方向改变之前,但因为包含片段在纵向模式引发该错误不存在的观点。

我曾尝试下面的隐藏/删除/分离的方法,但仍然得到错误。什么是正确的方式来告诉它不需要片段任何更多,不要试图显示?

@覆盖 公共无效的onCreate(包B){     super.onCreate(B);     片f = getSupportFragmentManager()findFragmentById(R.id.fragholder2)。     // rightPane是的FrameLayout保存我的片段。     如果(rightPane == NULL和放大器;&安培; F =空!){          FragmentTransaction英尺= getSupportFragmentManager()的BeginTransaction()。          ft.hide(F); //这不工作          ft.remove(F); //没有做到这一点          ft.detach(F); //或本          ft.commit;     } }

解决方案

我想我解决它。

我加了分片到后面堆栈中,然后才活动再次关闭弹出它关闭,有效地摆脱它。似乎工作至今。

美国 空间碎片主动清除 策略的未来发展方向

What is the correct way to handle an orientation change when using Fragments?

I have a landscape layout that contains 2 fragments (instantiated in code into FrameLayouts). When I switch to portrait mode (the layout of which contains only one FrameLayout that holds the left pane only), the right hand fragment is no longer required.

I am receiving an error:

E/AndroidRuntime(4519): Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f060085 for fragment myFragment{418a2200 #2 id=0x7f060085}

which is assume is my activity trying to re-attach the fragment where it was before the orientation change but as the view that contains the fragment does not exist in portrait mode the error is thrown.

I have tried the following hide/remove/detach methods but still get the error. What is the correct way to tell a fragment it is not needed any more and do not try to display?

@Override
public void onCreate(Bundle b) {
    super.onCreate(b);
    Fragment f = getSupportFragmentManager().findFragmentById(R.id.fragholder2);

    //rightPane is a framelayout that holds my fragment.
    if (rightPane == null && f != null) {
         FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
         ft.hide(f);     // This doesnt work
         ft.remove(f);   // neither does this
         ft.detach(f);   // or this
         ft.commit;
    }
}

解决方案

I think I resolved it.

I added the fragment to the back stack and then before the activity closes popped it off again which effectively gets rid of it. Seems to work so far.

阅读全文

相关推荐

最新文章