2011-12-13 137 views
3

我有一个片段的活动。片段和处理方向更改

我想处理的方向改变自己,所以我更新清单看起来像这样:

<activity android:name="com.test.app" android:configChanges="orientation|keyboardHidden"/> 

然后我更新了活动,看起来像这样:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     updateLayout(); 
    } 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     updateLayout(); 
    } 

    private void updateLayout() { 
     setContentView(R.layout.my_layout); 
    } 

我也是这样做的片段:

fragment.setRetainInstance(true); 

我遇到的问题是,当我做屏幕方向时,它在setContentView()上失败,说我的分段存在重复的ID。不知道如何使它不会发生 - 想法?

tia。

回答

1

我相信这是因为你告诉它不要扔掉你以前的布局,所以当你旋转它时,你仍然有你的旧视图(在这种情况下,它与新视图相同,因此ID冲突) 。

而且,我不知道,但我觉得这样的:

fragment.setRetainInstance(true); 

是不必要的?因为在这里你告诉它不要重新创建配置更改您的活动:

android:configChanges="orientation|keyboardHidden" 

在我的经验,在configChanges XML设置就足以阻止休闲。

编辑:

嗯只是再次寻找,究竟您使用的片段?如果在这里发布的代码是从FragmentActivity,那么我希望这样的事情对你的膨胀片段并将其添加到活动:

class SomeActivity extends FragmentActivity 
{ 
    ... 
    @Override 
    public void onCreate(Bundle savedInstance) 
    { 
    ... 
     LayoutInflater inflater = getLayoutInflater(); 
     inflater.inflate(R.layout.some_fragment, root); 
    ... 
    } 
} 

随着该XML看起来像: some_fragment.xml

<?xml version="1.0" encoding="utf-8"?> 
<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="com.someapp.fragments.SomeFragment"> 
</fragment> 

所以我想我不清楚你如何使用碎片。但是,像这样使用它们,使用XML配置设置,可以成功地禁用旋转中的重新创建。

+0

但XML包含片段 - 所以我不应该需要膨胀一个并添加它...对吗? – user645402 2011-12-15 00:51:20