活动onCreateView未接收布局

时间:2017-08-26 13:28:49

标签: android android-layout android-activity activity-oncreateview

我有一个像这样的简单布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.empresa.prueba.MainActivity">


    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_gravity="center_vertical|center_horizontal" android:text="Button"
        app:layout_anchor="@+id/include"
        app:layout_anchorGravity="center_vertical|center_horizontal"/>
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        app:srcCompat="@drawable/image2"/>

</LinearLayout>

我想在创建按钮时更改按钮的标签(我在活动中使用onCreateView方法而不是自定义工厂)。问题是,当android为布局中的每个视图调用onCreateView时,我从未得到按钮小部件控件。

我在onCreateView Activity覆盖中添加了一个日志,以查看以这种方式创建的视图:

@Override
    public View onCreateView(View v, String s, Context c, AttributeSet as)
    {
        Log.i("Inflating ---> ",s);
        return super.onCreateView(v,s,c,as);
    }

    @Override
    public View onCreateView(String s , Context c, AttributeSet as)
    {
        Log.i("Inflating ---> ",s);
        return super.onCreateView(s,c,as);
    }

但我得到的输出是:

I/Inflating --->: LinearLayout
I/Inflating --->: LinearLayout
I/Inflating --->: ViewStub
I/Inflating --->: ViewStub
I/Inflating --->: FrameLayout
I/Inflating --->: FrameLayout
I/Inflating --->: android.support.v7.widget.FitWindowsLinearLayout
I/Inflating --->: android.support.v7.widget.FitWindowsLinearLayout
I/Inflating --->: android.support.v7.widget.ViewStubCompat
I/Inflating --->: android.support.v7.widget.ViewStubCompat
I/Inflating --->: android.support.v7.widget.ContentFrameLayout
I/Inflating --->: android.support.v7.widget.ContentFrameLayout
I/Inflating --->: LinearLayout
I/Inflating --->: LinearLayout

正如您所看到的那样,按钮和Imageview都没有传递给onCreateView方法,因此我无法修改此视图上的任何内容。看来这种方法只接收容器吗?

如果有人知道为什么会这样,我会非常感激。

干杯。

1 个答案:

答案 0 :(得分:-2)

onCreateView生命周期方法用于将布局设置为片段。在这个生命周期方法中,我们无法进行任何更新,因为尚未创建布局。

如果您想更新任何视图标签,我们可以使用onViewCreated生命周期方法。