我试图直接访问片段中的按钮(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中访问的按钮:
这是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 } } }
任何人都知道为什么我无法直接访问Button?
这里有两个选择:
batteryInstallationButton
从onActivityCreated
视图已经膨胀的位置进行访问,它将找到按钮.
使用:
import kotlinx.android.synthetic.main.fragment_home.view.*
看到.view
我添加到合成中并直接从已经膨胀的视图中使用它:
val rootView = inflater!!.inflate(R.layout.fragment_home, container, false) rootView.batteryInstallationButton?.setOnClickListener.....
如果这可以解决您的问题,请与我们联系.问候!