使用 Kotlin 更改片段中的按钮背景

Change Button Background in a Fragment with Kotlin

我是 kotlin 的新手,所以我不知道自己做错了多少事情。 我正在尝试通过代码设置片段的按钮背景,但是当我在 phone 中启动应用程序时,只有背景和一个空按钮

class start : Fragment() {


    override fun onCreateView(Layoutinflater: LayoutInflater,
                              container: ViewGroup?, savedInstantState: Bundle?):View? {
        return Layoutinflater.inflate(R.layout.fragment_start, container, false)

        val button_start = view!!.findViewById<Button>(R.id.button_start_1_id)

        button_start.setBackgroundResource(R.drawable.button_start1)


    }


}

<ImageButton

    android:id="@+id/button_start_1_id"
    android:layout_width="124dp"
    android:layout_height="69dp"
    android:onClick="button_start_pushed">

</ImageButton>

我也是这个论坛的新人所以如果做错了什么请告诉我

欢迎使用 Whosebug。

你的问题的答案很简单。首先,您不需要使用以下代码明确引用您的视图,这是多余的。

        val button_start = view!!.findViewById<Button>(R.id.button_start_1_id)

您可以使用视图的 ID 轻松获取对您的视图/图像视图的引用。在您的情况下,您可以在视图 class 中调用背景 属性 并使用 resource.getDrawable(R.drawable.button_start1)[=14= 设置背景]

如果你的API 16级或以上,你可以使用下面的代码。

class ImageFragment : Fragment(){

override fun onCreateView(Layoutinflater: LayoutInflater,
                          container: ViewGroup?, savedInstantState: Bundle?): View? {
    return Layoutinflater.inflate(R.layout.fragment_start, container, false)

}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    button_start.background = resources.getDrawable(R.drawable.button_start1)
    }
}

resources.getDrawable 在 Kotlin 中给出弃用警告,因为它需要 Resource.Theme 作为第二个参数。如果你有 Resource.Theme,把它作为第二个参数。 您的布局如下:

<ImageButton

    android:id="@+id/button_start"
    android:layout_width="124dp"
    android:layout_height="69dp"
    android:onClick="button_start_pushed">

</ImageButton>

如果您使用的API等级低于16级,那么您可以使用以下代码:

class ImageFragment : Fragment(){

override fun onCreateView(Layoutinflater: LayoutInflater,
                          container: ViewGroup?, savedInstantState: Bundle?): View? {
    return Layoutinflater.inflate(R.layout.fragment_start, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    button_start.setImageResource(R.drawable.button_start1)
}
}

只需确保您的可绘制对象中有 button_start1 图标或 img,并且布局名称正确。

还有一点要注意:如果你有自己一致的命名约定,或者至少遵循 Kotlin 或 Java.

推荐的命名约定,会容易得多

希望对您有所帮助!