在onCreateView之外使用android Inflate

Jon*_*han 3 android android-layout android-inflate android-fragments

我有一个片段.在我的On create中,我按照以下方式设置了我的inflater.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    v= inflater.inflate(R.layout.dashboard_two, container, false);  
    getActivity().getActionBar().setTitle("NV Technologies");
    new HttpRequestFaultList().execute();
    return v;
}   
Run Code Online (Sandbox Code Playgroud)

我想更改inflater ti显示在onCreate视图之外的不同布局.我试过了:

v= inflater.inflate(R.layout.custom_dash, container, false);
Run Code Online (Sandbox Code Playgroud)

custom_dash.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:id="@+id/testFrag"
  android:layout_height="match_parent"
  android:orientation="vertical" >

   <ImageView
      android:id="@+id/imageView1"
      android:layout_width="269dp"
      android:layout_height="387dp"
      android:layout_gravity="center"
      android:scaleType="centerInside"
      android:src="@drawable/message" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

但因为它不在onCreate中,所以不存在inflater或容器.我想在catch块中更改Layout,如果有catch,则Layout必须更改.甚至可以在片段中更改布局但在onCreate方法之外?如何

Sim*_*mas 6

您可以在片段中充气,如下所示:

FrameLayout container = (FrameLayout) getActivity().findViewById(R.id.fragment_container);
LayoutInflater.from(getActivity())
        .inflate(R.layout.custom_dash, container, false);
Run Code Online (Sandbox Code Playgroud)

如果这对您不起作用(由于某种原因),您始终可以在方法中保存对inflater和容器的引用,并在以下情况下onCreateView使用它们:

private LayoutInflater mInflater;
private ViewGroup mContainer;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mInflater = inflater;
    mContainer = container;
    v = inflater.inflate(R.layout.dashboard_two, container, false);  
    getActivity().getActionBar().setTitle("NV Technologies");
    new HttpRequestFaultList().execute();
    return v;
}

public View someOtherMethod() {
    mInflater.inflate(R.layout.custom_dash, mContainer, false);
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,@ pez膨胀不会将视图添加到层​​次结构中.你需要手动完成它,例如mContainer.addView(mView); (2认同)