-1

我的 MainActivity 扩展了 BaseActivity。在我的 BaseActivity 中,我重写setContentView(int layoutResId)(请参阅下文),以便当我的 MainActivity 调用时setContentView(R.layout.activity_main),BaseActivity 中的视图组件 - 在调用该方法activityContainer后将包含R.layout.activity_main它的子组件getLayoutInflater().inflate(layoutResID, activityContainer, true);setContentView(View view)如果我想覆盖而不是setContentView(int layoutResId)在 BaseActivity中,如何实现相同的目标?

编辑:这两种方法有什么区别?

BaseActivity 内部:

@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);
}

activity_base.xml:

<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>
4

3 回答 3

2

两种方法的说明:

setContentView (int layoutResID) :

Set the activity content from a layout resource.
The resource will be inflated, adding all top-level views to the activity.

setContentView(视图视图,ViewGroup.LayoutParams 参数)

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 先膨胀然后将其添加到活动根视图的那个。

带有 View 的那个不做任何膨胀,它只是立即将它添加到根视图,使用给定的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);
}
于 2016-02-01T09:40:13.837 回答
1

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

public abstract void setContentView(View view);

public abstract void setContentView(View view, ViewGroup.LayoutParams params);

实施后,您可以在MainActivity

于 2016-02-01T09:40:45.953 回答
0

我认为不同的是(View layoutResID)(View view)

使用方法setContentView(int layoutResID):您从布局资源中设置活动内容。

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

于 2016-02-01T09:42:07.977 回答