Активность 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, чтобы увидеть, какие представления создаются таким образом:
@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 ответ
onCreateView
Метод жизненного цикла для установки макета на фрагмент. В этом методе жизненного цикла мы не можем делать какие-либо обновления, потому что макет еще не создан.
Если вы хотите обновить ярлык любого представления, мы можем сделать в onViewCreated
метод жизненного цикла.