改变片段

时间:2013-05-15 14:41:53

标签: android android-fragments

我最近修改了我的ActionBar,因为它有两个标签,分别对应两个片段。

假设我的第一个标签是主页面,第二个是我的关于页面。

关于页面是静态的。

主页面发生了变化。让我们说,为了问题,主页面在屏幕中央有这个单一按钮。我希望它以这样一种方式,当用户点击按钮时,页面将更改为另一个带有文本的屏幕。使用Intent可以轻松完成此操作。我不知道如何用Fragments做到这一点。

总之,在标签内切换片段的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

考虑使用片段的方法getChildFragmentManager()。

所以你要走了。

在第一个标签

创建嵌套片段whitch将显示按钮。

MainPage.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        />



</LinearLayout>

class MainPage extends Fragment(){

@Override
public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

     FragmentTransaction ft = getChildFragmentManager().beginTransaction();
     ft.replace(R.id.fragment_container, new ButtonFragment(), ButtonFragment.class.getName());
     ft.commit();


     ((Button)getActivity().findViewById(R.id.your_button)).setOnClickListener(new OnClickListener(){
     public void onClick(View v){
  FragmentTransaction ft = getChildFragmentManager().beginTransaction();
     ft.replace(R.id.fragment_container, new TextFragment(), TextFragment.class.getName());
ft.addToBackStack(TextFragment.class.getName());
     ft.commit();
      }

})

}

public boolean onBackPressed(){
FragmentManager mn = getChildFragmentManager();

if(mn.getBackStackEntryCount()>0) 
                mn.popBackStack(man.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}



class ButtonFragment extends Fragment(){

.....

public void onCreateView(Bundle savedinstance){
//inflate you view with button here

}