java - Kotlin直接访问android.support.v4.app.Fragment空对象引用中的Button

标签 java android kotlin

我正在尝试直接访问 fragment (android.support.v4) 中的按钮,这就是它抛出的内容:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at             
com.....fragments.HomeFragment._$_findCachedViewById(HomeFragment.kt)
at 
com.....fragments.HomeFragment.onCreateView(HomeFragment.kt:25)

这是我试图在 fragment_home.xml 中访问的按钮:

<Button
    android:id="@+id/batteryInstallationButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/battery_installation"
    android:layout_weight="1"
    android:textSize="12sp"
    android:background="@drawable/custom_button"
    android:textColor="@color/white"
    android:layout_marginStart="5dp"
    android:layout_marginEnd="5dp"/>

这是 HomeFragment.kt 中的 Kotlin 代码

import android.content.Context
import android.net.Uri
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast

import kotlinx.android.synthetic.main.fragment_home.*

class HomeFragment : Fragment() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    val rootView = inflater!!.inflate(R.layout.fragment_home, container, false)

    batteryInstallationButton?.setOnClickListener {
        Toast.makeText(context, "ehere", Toast.LENGTH_SHORT).show();
    }

    return rootView
}

companion object {

    fun newInstance(): HomeFragment {
        val fragment = HomeFragment()
        return fragment
    }
}

}

有人知道为什么我不能直接访问按钮吗?

最佳答案

这里有两种选择:

  1. onActivityCreated 访问 batteryInstallationButton,在该 View 中, View 将已经膨胀并会找到按钮。

  2. 使用:

import kotlinx.android.synthetic.main.fragment_home.view.*

查看我添加到合成中的 .view 并直接从您已经膨胀的 View 中使用它:

val rootView = inflater!!.inflate(R.layout.fragment_home, container, false)

rootView.batteryInstallationButton?.setOnClickListener.....

如果这能解决您的问题,请告诉我。问候!

关于java - Kotlin直接访问android.support.v4.app.Fragment空对象引用中的Button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34245895/

相关文章:

java - 在 Android 中处理方向变化的正确方法

Java游戏剪刀石头布。无法找出用户控制循环的主要方法来继续播放

android - 如何将Soundmanager播放音量设置为铃声音量?

java - ECDSA KeyPairGenerator 不可用(但在 JUnit 中有效)

java - xamarin如何编译到android?

java - Postgresql 8.4 使用 Hibernate 读取 OID 样式的 BLOB

android - Kotlin调试无法在Visual Studio代码中启动

java - 将字符串电话号码转换为整数

kotlin - Java lambda 类型推断在 Kotlin 中未按预期工作

java - 如何区分 kotlin 中绑定(bind)的可调用成员引用和相同类型的函数?