Android setContentView(视图视图)和setContentView(int layoutResId)之间的差异

Android setContentView(视图视图)和setContentView(int layoutResId)之间的差异,android,android-inflate,setcontentview,Android,Android Inflate,Setcontentview,我的MainActivity扩展了BaseActivity。在我的BaseActivity中,我重写了setContentView(int-layoutResId)(请参阅下文),这样当我的MainActivity调用setContentView(R.layout.activity_-main)时,BaseActivity内部的视图组件--activityContainer将包含R.layout.activity\u main作为方法GetLayoutFlater().inflate(layou

我的MainActivity扩展了BaseActivity。在我的BaseActivity中,我重写了
setContentView(int-layoutResId)
(请参阅下文),这样当我的MainActivity调用
setContentView(R.layout.activity_-main)
时,BaseActivity内部的视图组件--
activityContainer
将包含
R.layout.activity\u main
作为方法
GetLayoutFlater().inflate(layoutResID,activityContainer,true)后的子级被调用。如果我想在BaseActivity中重写
setContentView(视图视图)
而不是
setContentView(int-layoutResId)
,我如何实现同样的效果

编辑:这两种方法的区别是什么

内部基本活动:

@Override
public void setContentView(int layoutResId) {
        RelativeLayout baseActivity = (RelativeLayout) getLayoutInflater()
            .inflate(R.layout.activity_base, null);

        FrameLayout activityContainer = (FrameLayout) baseActivity
            .findViewById(R.id.activity_container);

        getLayoutInflater().inflate(layoutResID, activityContainer, true);
}
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

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

    .... other components
</RelativeLayout>
activity\u base.xml:

@Override
public void setContentView(int layoutResId) {
        RelativeLayout baseActivity = (RelativeLayout) getLayoutInflater()
            .inflate(R.layout.activity_base, null);

        FrameLayout activityContainer = (FrameLayout) baseActivity
            .findViewById(R.id.activity_container);

        getLayoutInflater().inflate(layoutResID, activityContainer, true);
}
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

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

    .... other components
</RelativeLayout>

.... 其他组成部分

两种方法的描述:

设置内容视图(int layoutResID)

Set the activity content from a layout resource.
The resource will be inflated, adding all top-level views to the activity.
Set the activity content to an explicit view.
This view is placed directly into the activity's view hierarchy.
It can itself be a complex view hierarchy.
设置内容视图(视图视图,ViewGroup.LayoutParams参数)

Set the activity content from a layout resource.
The resource will be inflated, adding all top-level views to the activity.
Set the activity content to an explicit view.
This view is placed directly into the activity's view hierarchy.
It can itself be a complex view hierarchy.
基本上,区别在于期望布局ID的视图首先将其膨胀,然后将其添加到活动根视图中

带有视图的视图不会进行任何膨胀,它只是使用给定的
LayoutParams
立即将其添加到根视图中

总之,您的重写方法如下所示:

@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
    RelativeLayout baseActivity = (RelativeLayout) getLayoutInflater()
        .inflate(R.layout.activity_base, null);
    FrameLayout activityContainer = (FrameLayout) baseActivity
        .findViewById(R.id.activity_container);
    activityContainer.addView(view, params);
}

Activity
类中有两个抽象方法,您可以在
BaseActivity
中实现它们

public abstract void setContentView(View view);


一旦实现,您可以在
main活动中使用这些方法

我认为不同之处在于
(查看布局ResID)
(查看视图)

使用方法
setContentView(int-layoutResID)
:从版面资源设置活动内容


使用方法
setContentView(视图视图)
:您可以从视图中设置活动内容(此视图可以从布局资源获取,也可以通过编程方式创建)

如果我错了,请更正我<代码>activityContainer.addView(视图,参数)
几乎与
getLayoutFlater()相同。充气(layoutResID,activityContainer,true)?唯一的区别是,在使用
addView
方法之前,我需要先对布局进行充气以获得视图?