嵌套片段 - 从片段开始的片段不会使布局xml

时间:2017-08-30 06:20:16

标签: android android-fragments

我正在尝试嵌套片段,因为我的xml布局开始难以维护。

从片段中,当我点击跳过按钮时,我开始片段。我尝试了正常的开始和子片段。在这两种情况下,我都在inflate方法中进入片段,但我的屏幕保持空白。当然,当我将片段称为第一级时,布局会正确膨胀。

调用第一个片段中的第二个片段:

   skip.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            SelectServiceFragment ssf = new SelectServiceFragment();
            ft.add(ssf,"SelectService");
            ft.commit();
        }
    });

SelectServiceFragment:

public class SelectServiceFragment extends Fragment {
    Context context;


    public SelectServiceFragment() {
        // Required empty public constructor
    }

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

和我的xml布局:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Select service!!!!"
        android:textColor="#000000"
        />
</RelativeLayout>

我是否遗漏了嵌套片段中的某些内容?

4 个答案:

答案 0 :(得分:0)

试试这个:

skip.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        Fragment ssf = new SelectServiceFragment();
        ft.replace(R.id.container, ssf);
        ft.commit();
    }
});

答案 1 :(得分:0)

FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            SelectServiceFragment ssf= new SelectServiceFragment();
            fragmentTransaction.add(R.id.fragment_container, ssf, "SelectService");
            fragmentTransaction.commit();

试试这种方式

答案 2 :(得分:-1)

是的,你错过了最重要的事情。您可以从基类方法更改片段。您首先替换方法的类。将该方法作为公共方法,并使用片段类名称传递它的参数。假设你在基类中有第一个替换或启动片段的方法

public void replaceFragment( Fragment fragment) {

    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.content_home, fragment);
    fragmentTransaction.commit();
    // if you have used drawer_layout
    // othere wise no need of below lines
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
}   

然后在任何片段中调用此方法并传递片段类名称,如此((BaseClassName) getActivity()).replaceFragment(new ReportLostItem());,这样您就可以从任何片段类替换片段。如果它能解决你的问题,请接受答案

答案 3 :(得分:-1)

我找借口让你失去时间! 一切都按预期工作! 当我从RelativeLayout跳转时,我唯一做的就是在framelayout所在的RL上设置可见性(不可见)。 遗憾!