2017-08-30 75 views
0

我正在尝试嵌套片段,因为我的xml布局开始难以维护。嵌套片段 - 从片段开始的片段不会膨胀布局xml

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

呼叫转移到第二个片段一日一中:

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> 

我错过了在嵌套片段的东西吗?

+0

你使用过chindfragment manager吗? –

+0

我尝试了两种方法。 FragmentTransaction ft = getChildFragmentManager()。beginTransaction(); ft.replace(R.id.selsvcefrag,ssf);我试过非孩子的方法,因为我想消除framelayout(R.id.selsvcefrag)。这两种方式导致膨胀显示一个空的屏幕。 – narb

回答

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

Mike的好评;)我试过了。同样的行为。我看到了对inflater.inflate的调用,但屏幕是空的。 – narb

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

尝试这种方式

-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());这样你就可以从任何更换片段片段类。接受答案,如果它解决您的问题

+0

我不明白你的观点:你称基类是什么?它不能解释为什么xml的膨胀是空的?如果我能正确理解你,我可以在我的main_activity中放置一个公共方法replaceFragment?当我按照原样尝试代码时,我在FragmentManager和android.app.Fragment所需的support.v4之间存在冲突。我试图将所有内容切换到support.v4,但我遇到了更多问题。 – narb

+0

可以请你分享你的完整代码。我认为你是新来的碎片。请分享你的主类和一个片段类代码 –

+0

你非常接近解决你的问题。基类意味着你的MainActivity。并导入android.support.v4.app.Fragment;在你的片段类。并删除导入android.app.fragemnt。这样你就可以替换任何碎片 –

-1

我的借口家伙让你失去你的时间在这个! 所有工作正常! 我在从RelativeLayout跳转时做的唯一事情是在framelayout所在的RL上的setvisibility(不可见)。 对不起!