碎片正确的方式

时间:2014-02-05 09:30:47

标签: android android-fragments

我正在尝试一些片段。我有一个带按钮的片段,当我点击该按钮时,我切换到另一个片段。现在,当我按下后退按钮时,我返回到第一个好的片段。现在,当我再次单击该按钮时,将启动一个新片段。所以我总是开始一个新片段。我认为这不是它需要做的方式。有没有更好的方法来恢复已经创建的片段?

我的代码:

public static class PlaceholderFragment extends Fragment{

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        Button test = (Button)rootView.findViewById(R.id.button);
        test.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                Log.d("Test", "Button clicked.");
                TestFrag newFragment = new TestFrag();

                FragmentTransaction transaction = getFragmentManager().beginTransaction();

                transaction.replace(R.id.container, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
            }
        });
        return rootView;
    }
}

public static class TestFrag extends Fragment {

    public TestFrag() {
        Log.d("Test","New fragment");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main2, container, false);
        return rootView;
    }
}

2 个答案:

答案 0 :(得分:0)

使用片段事务时,您可以为片段

指定标记

fragmentTransaction.add(R.id.main_fragment,newFragment,fragTag); fragmentTransaction.commit();

之后您可以通过fragmentManager

中的标签找到片段

newFragment = fragMan.findFragmentByTag(fragTag); 如果newFragment然后为null,你应该创建片段,因为标签

找不到它

答案 1 :(得分:0)

感谢Joakim:

fragmentTransaction.add(R.id.main_fragment, newFragment, fragTag); fragmentTransaction.commit();

之后您可以通过fragmentManager

中的标签找到片段

newFragment = fragMan.findFragmentByTag(fragTag);如果newFragment为null,则应创建Fragment,因为标签找不到它。如果标记不为null,则只需添加并提交新标记即可。