Android将当前片段replace为另一个片段

我刚开始使用HoneyComb的片段devise。 我创造了两个片段。 当我点击左侧片段中的一个button时,右侧会创build一个新片段。 与此同时,当我点击右边的片段中的一个button(即我的代码中的DetialsFragment应该被replace为另一个片段main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <fragment class="com.fragment.example.Titles" android:id="@+id/titles" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <FrameLayout android:id="@+id/details" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> </LinearLayout> 

FragmentExample.java

 public class FragmentExample extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 

Titles.java

 public class Titles extends Fragment { public FragmentTransaction ft; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.main1, null); Button button1 = (Button)v.findViewById(R.id.button1); button1.setText("santhosh"); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); if (details == null || details.getShownIndex() != 1) { // Make new fragment to show this selection. details = DetailsFragment.newInstance(1); // Execute a transaction, replacing any existing // fragment with this one inside the frame. ft = getFragmentManager().beginTransaction(); ft.add(R.id.details, details, "detail"); ft.setTransition( FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } } }); return v; } } 

DetailsFragment.java

 public class DetailsFragment extends Fragment { /** * Create a new instance of DetailsFragment, initialized to * show the text at 'index'. */ Titles title = new Titles(); String[] titles = {"Title1", "Title2", "Title3", "Title4"}; public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } public int getShownIndex() { return getArguments().getInt("index", 0); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { // Currently in a layout without a container, so no // reason to create our view. return null; } Button button = new Button(getActivity()); button.setText("Next"); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); return button; } } 

Solutions Collecting From Web of "Android将当前片段replace为另一个片段"

然后提供您的button显示和点击事件正在触发您可以在您的点击事件中调用以下内容:

 final FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.details, new NewFragmentToReplace(), "NewFragmentTag"); ft.commit(); 

如果你想返回到DetailsFragment点击回来确保你添加上面的事务到后退堆栈,即

 ft.addToBackStack(null); 

还是我错过了什么? 或者,有些人build议您的活动获取该button的点击事件,并有责任replace详细信息窗格中的片段。

你可以尝试下面的代码。 从旧片段中推新片段是非常简单的方法。

 private int mContainerId; private FragmentTransaction fragmentTransaction; private FragmentManager fragmentManager; private final static String TAG = "DashBoardActivity"; public void replaceFragment(Fragment fragment, String TAG) { try { fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(mContainerId, fragment, tag); fragmentTransaction.addToBackStack(tag); fragmentTransaction.commitAllowingStateLoss(); } catch (Exception e) { // TODO: handle exception } } 

在代码中使用android.support.v4.app作为FragmentManager&FragmentTransaction,它已经为我工作。

 DetailsFragment detailsFragment = new DetailsFragment(); android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.details,detailsFragment); fragmentTransaction.commit();