我的MainActivity扩展了BaseActivity。在我的BaseActivity中,我覆盖了setContentView(int layoutResId)
(请参阅下文),以便当我的MainActivity调用setContentView(R.layout.activity_main)
时,BaseActivity中的视图组件 - activityContainer
将包含R.layout.activity_main
作为其子级在调用方法getLayoutInflater().inflate(layoutResID, activityContainer, true);
之后。如果我想在BaseActivity中覆盖setContentView(View view)
而不是setContentView(int layoutResId)
,我该如何实现同样的目标?
编辑:这两种方法有什么区别?
Inside 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>
答案 0 :(得分: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(View view,ViewGroup.LayoutParams params):
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的布局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);
}
答案 1 :(得分:1)
Activity
课程中有两种抽象方法可以在BaseActivity
中实现。
public abstract void setContentView(View view);
和
public abstract void setContentView(View view, ViewGroup.LayoutParams params);
实施后,您可以在MainActivity
答案 2 :(得分:0)
我认为不同的是(View layoutResID)
和(View view)
使用方法setContentView(int layoutResID)
:您可以从布局资源设置活动内容。
使用方法setContentView(View view)
:您可以从视图设置活动内容(您可以从布局资源获取此视图,也可以通过编程方式创建)