包含布局的参考视图
Reference View From Included Layout
我有一个带有以下包含标记的片段布局:
<include
android:id="@+id/ivRemoveData"
layout="@layout/item_menu"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="16dp"
android:visibility="visible"/>
item_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageView
android:id="@+id/ivIcon"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerInParent="true"
android:visibility="gone"
android:background="@drawable/not_passed_circle_level_item"
android:clipChildren="false"
android:clipToPadding="false"/>
我需要使用方法ivIcon.setImageResource()
。
我的片段class:
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.fragment_options.*
import kotlinx.android.synthetic.main.item_menu.view.*
class OptionsFragment : BaseFragment(), OptionsMVP.View
{
override fun onCreateView(inflater : LayoutInflater, container : ViewGroup?, savedInstanceState : Bundle?) : View?
{
val view = inflater.inflate(R.layout.fragment_options, container, false)
return view
}
override fun onViewCreated(view : View?, savedInstanceState : Bundle?)
{
super.onViewCreated(view, savedInstanceState)
ivRemoveData.ivIcon.setImageResource(R.drawable.ic_delete)
}
}
我收到一个错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
at hobbajt.com.BubbleQuiz.Options.OptionsFragment.onViewCreated(OptionsFragment.kt:29)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1314)
似乎 ivIcon
为空,即使它在包含的布局中。如何引用此 ImageView?
如果您为 <include/>
标签提供一个 ID,它将覆盖父级包含的布局的 ID。
你的情况most probably
android:id="@+id/ivRemoveData"
覆盖您的 imageView
的 ID。并且找不到id ivIcon
。
您可以这样更改 xml:
<include
android:id="@+id/ivIcon"
layout="@layout/item_menu"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="16dp"
android:visibility="visible"/>
我有一个带有以下包含标记的片段布局:
<include
android:id="@+id/ivRemoveData"
layout="@layout/item_menu"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="16dp"
android:visibility="visible"/>
item_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageView
android:id="@+id/ivIcon"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerInParent="true"
android:visibility="gone"
android:background="@drawable/not_passed_circle_level_item"
android:clipChildren="false"
android:clipToPadding="false"/>
我需要使用方法ivIcon.setImageResource()
。
我的片段class:
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.fragment_options.*
import kotlinx.android.synthetic.main.item_menu.view.*
class OptionsFragment : BaseFragment(), OptionsMVP.View
{
override fun onCreateView(inflater : LayoutInflater, container : ViewGroup?, savedInstanceState : Bundle?) : View?
{
val view = inflater.inflate(R.layout.fragment_options, container, false)
return view
}
override fun onViewCreated(view : View?, savedInstanceState : Bundle?)
{
super.onViewCreated(view, savedInstanceState)
ivRemoveData.ivIcon.setImageResource(R.drawable.ic_delete)
}
}
我收到一个错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
at hobbajt.com.BubbleQuiz.Options.OptionsFragment.onViewCreated(OptionsFragment.kt:29)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1314)
似乎 ivIcon
为空,即使它在包含的布局中。如何引用此 ImageView?
如果您为 <include/>
标签提供一个 ID,它将覆盖父级包含的布局的 ID。
你的情况most probably
android:id="@+id/ivRemoveData"
覆盖您的 imageView
的 ID。并且找不到id ivIcon
。
您可以这样更改 xml:
<include
android:id="@+id/ivIcon"
layout="@layout/item_menu"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="16dp"
android:visibility="visible"/>