在片段中设置新的布局

我试图在运行时在特定条件下更改片段的布局。

在onCreateView()中膨胀的初始布局:

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

然后在片段代码后面的某个时候,我想用其他布局replace初始布局。

到目前为止,我已经尝试了一些东西。 这是我拥有的最新版本:

 private void Something(){ if(checkLicenseStatus(licenseStatus, statusMessage)){ View vv = View.inflate(getActivity(), R.layout.play_video, null); //more code } } 

我怎样才能做到这一点?

设置完成后,您无法replace片段的布局。 如果你需要条件布局,那么你必须重新devise你的布局,并将其分割成更小的片段,或者你可以将所有的布局元素分组在子容器中(比如LinearLayout ),然后把它们全部放在RelativeLayout ,这些LinearLayout在需要的时候用setVisibility()可见性。

通过FragmentManger使用FragmentTransaction

 FragmentManager fm = getFragmentManager(); if (fm != null) { // Perform the FragmentTransaction to load in the list tab content. // Using FragmentTransaction#replace will destroy any Fragments // currently inside R.id.fragment_content and add the new Fragment // in its place. FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fragment_content, new YourFragment()); ft.commit(); } 

类YourFragment的代码只是一个LayoutInflater,所以它返回一个视图

 public class YourFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.your_fragment, container, false); return view; } } 

是的,我已经这样做了。 当我需要设置一个新的布局(xml)时,应该执行下面的代码片段。

  private View mainView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup containerObject, Bundle savedInstanceState){ super.onCreateView(inflater, containerObject, savedInstanceState); mainView = inflater.inflate(R.layout.mylayout, null); return mainView; } private void setViewLayout(int id){ LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); mainView = inflater.inflate(id, null); ViewGroup rootView = (ViewGroup) getView(); rootView.removeAllViews(); rootView.addView(mainView); } 

每当我需要改变布局,我只是调用下面的方法

  setViewLayout(R.id.new_layout);