【问题标题】:Fragments and screen orienatation issues碎片和屏幕方向问题
【发布时间】:2013-04-13 05:33:49
【问题描述】:
public class MainActivity extends FragmentActivity {
FragmentTransaction ft;
Button b1, b2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        ft.replace(android.R.id.content, new Fragment1());

    } else {

        ft.add(R.id.LinearLayout1, new MainFragment());
        ft.add(R.id.LinearLayout2, new Fragment1());

    }

    ft.commit();

 }

}

public class MainFragment extends Fragment implements OnClickListener{
 Button b1,b2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    return inflater.inflate(R.layout.activity_main_fragment, container, false);
}
@Override
public void onStart() {
    super.onStart();
    // ---Button view---
    b1 = (Button) getActivity().findViewById(R.id.f1);
    b2 = (Button) getActivity().findViewById(R.id.f2);
    b1.setOnClickListener(this);
    b2.setOnClickListener(this);


}
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v==b1){
        FragmentManager fm = getActivity().getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.LinearLayout2,new Fragment2());
        ft.commit();


    }
    if(v==b2){
        FragmentManager fm =getActivity().getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.LinearLayout2,new Fragment3());
        ft.commit();


    }
}

}

当应用程序在纵向模式下运行时,这里的问题 Fragment1 显示为我想要的,当我将方向更改为横向时,MainFragment 和 Fragment2 也显示为我想要的但 Fragment1 仍然存在, 当我再次将方向更改为纵向时,应用程序停止了。

我该如何解决?

【问题讨论】:

    标签: android android-fragments fragment screen-orientation android-fragmentactivity


    【解决方案1】:

    所以问题是你假设每次调用 onCreate 时你都是从没有片段开始的......事实并非如此。

    第一次为 MainActivity 调用 onCreate 时不会有片段。假设设备是纵向的,将添加 Fragment1。当您旋转到横向时,将添加另一个 Fragment1 实例和一个 MainFragment 实例。您现在有三个片段实例。当您返回纵向时,它会想要添加 Fragment1 的另一个实例......但它可能会崩溃,因为纵向布局没有 R.id.LinearLayout1 或 R.id.LinearLayout2。

    底线是...您需要在处理完碎片后移除它们...它们不会自行消失。

    【讨论】:

    • 谢谢@user1132647,我想我是通过从 onPause() 调用 popBackStackImmediate() 方法解决的
    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多