【问题标题】:Activity onCreateView not receiving all widgets in layoutActivity onCreateView 未接收布局中的所有小部件
【发布时间】:2017-08-26 13:28:48
【问题描述】:

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

<?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 方法,因此我无法修改此视图上的任何内容。这个方法好像只接收容器?

如果有人知道为什么会这样,我将不胜感激。

干杯。

【问题讨论】:

  • tools:context="com.empresa.prueba.MainActivity" 表明这是一个片段布局,而不是您正在跟踪的活动布局。
  • 不,我没有使用片段

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


【解决方案1】:

onCreateView 生命周期方法用于设置布局到片段。在这个生命周期方法中我们不能做任何更新,因为布局还没有创建。

如果您想更新任何视图的标签,我们可以在onViewCreated 生命周期方法中进行。

【讨论】:

  • 实现android.view.LayoutInflater.Factory2#onCreateView()Activity#onCreateView()Fragment#onCreateView()不同
猜你喜欢
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
相关资源
最近更新 更多