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

我试图直接访问片段(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 ,视图将已经充满,它会找到按钮。

  2. 使用:

导入kotlinx.android.synthetic.main.fragment_home.view。*

看到我添加到综合的.view ,并直接从你已经膨胀的视图中使用它:

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

请让我知道这是否解决您的问题。 问候!