旋转时碎片消失

use*_*426 6 java android rotation android-layout android-fragments

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

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

ScrrenShot

如果我旋转片段就消失了.

在此输入图像描述

但如果我关闭应用程序,然后旋转手机,然后再次打开应用程序,它的工作原理.

在此输入图像描述

我有两个不同的布局,一个用于纵向模式,另一个用于横向模式,两个都具有相同的名称,我在"布局"文件夹中具有纵向布局,以及"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();

    }
Run Code Online (Sandbox Code Playgroud)

片段:

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);


    }
Run Code Online (Sandbox Code Playgroud)

kco*_*ock 17

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

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