旋转时碎片消失

6
我已经使用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);


    }

当屏幕方向改变时,Activity 会被销毁并重新创建。同样地,由于 Fragment 是由 Activity 托管的,所以 Fragment 也会被销毁并重新创建。 - Raghunandan
4个回答

20

实际上,每次创建Activity时都不需要添加FragmentFragmentManager会自动维护它们。你应该将执行FragmentTransaction的代码包装在if (savedInstanceState == null)检查中,这样它只会在首次创建Activity时执行。例如:

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

我有if语句,但是内容仍然消失了,你有任何想法为什么吗?http://stackoverflow.com/questions/41231235/activity-content-disappears-when-rotating - János

0

-2

你好,你能试着实现onResume()方法并从那里调用这段代码吗?

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

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

同时重写 onSaveInstanceState() 方法。


-3
在你的Fragment的onCreate方法中尝试使用setRetainInstance(true);。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接