【问题标题】:Fragments disappear when rotated旋转时碎片消失
【发布时间】:2014-01-09 05:27:38
【问题描述】:

我已经使用 java 添加了片段。

当我以纵向模式打开应用程序时,它可以工作。

如果我旋转片段就会消失。

但如果我关闭应用程序,然后旋转手机,然后再次打开应用程序,它就可以工作。

我有两种不同的布局,一种用于纵向模式,另一种用于横向模式, 两者都具有相同的名称,我在“layout”文件夹中有纵向布局,在“layout-land”文件夹中有横向布局。

我好像忘记了什么,真的,我是 android 开发的新手。

活动:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ListFragment frag = new ListFragment();

        setContentView(R.layout.layout_main);

        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();

        transaction.add(R.id.LIST_LAYOUT,frag,"LIST");
        transaction.commit();

    }

片段:

public class ListFragment extends Fragment implements AdapterView.OnItemClickListener{


    ListView List;
    Communicator communicator;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //return super.onCreateView(inflater, container, savedInstanceState);

        return inflater.inflate(R.layout.mlistfragment,container,false);


    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        communicator = (Communicator) getActivity();

        List = (ListView) getActivity().findViewById(R.id.listView);

        ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(),R.array.StrListButtons,android.R.layout.simple_list_item_1);
        List.setAdapter(adapter);


        List.setOnItemClickListener(this);


    }

【问题讨论】:

  • 当方向改变时活动被销毁并重新创建。片段也是如此,因为片段由活动托管

标签: java android android-layout android-fragments rotation


【解决方案1】:

您实际上不需要在每次创建Activity 时添加Fragment; FragmentManager 会自动维护它们。您应该将执行FragmentTransaction 的代码包装在if (savedInstanceState == null) 检查中,以便仅在第一次创建Activity 时执行它。例如:

if (savedInstanceState == null) {
    getFragmentManager().beginTransaction()
                        .add(R.id.list_layout, new ListFragment(), "LIST")
                        .commit();
}

【讨论】:

【解决方案2】:

通常在方向更改后重新创建活动。 您可以尝试使用 onSaveInstanceState() 方法来保存数据。

请参考此链接了解更多详情。

http://developer.android.com/guide/components/activities.html#ConfigurationChanges

【讨论】:

    【解决方案3】:

    您好,您可以尝试实现 onResume() 并调用 这段代码来自那里

        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
    
        transaction.add(R.id.LIST_LAYOUT,frag,"LIST");
        transaction.commit();
    

    也覆盖 onsaveinstancestate()

    【讨论】:

      【解决方案4】:

      尝试使用 setRetainInstance(true);在片段的 onCreate 方法中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多