2014-02-05 58 views
0

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

我的代码:

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; 
    } 
} 
+0

尝试添加您的第一个片段而不是替换它 –

回答

0

当您使用的片段交易,你可以指定一个标记为片段

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

然后以后就可以从fragmentManager

newFragment = fragMan.findFragmentByTag(fragTag)找到由标签片段; 如果newFragment然后为空则应该创建片段,因为它不是由标签

0

由于发现的Joakim:

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

后来的后来,你可以从fragmentManager

newFragment = fragMan.findFragmentByTag(fragTag);找到标签片段如果newFragment的值为null,则应该创建Fragment,因为它没有被标签找到。如果标签不为空,您可以添加并提交新标签。