如何使用Kotlin Android扩展程序Fragment?如果我在里面使用它们onCreateView(),我得到这个NullPointerException例外:
引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.view.View android.view.View.findViewById(int)'
这是片段代码:
package com.obaied.testrun.Fragment
import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.obaied.acaan.R
import kotlinx.android.synthetic.main.fragment_card_selector.*
public class CardSelectorFragment : Fragment() {
val TAG = javaClass.canonicalName
companion object {
fun newInstance(): CardSelectorFragment {
return CardSelectorFragment()
}
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
var rootView = inflater?.inflate(R.layout.fragment_card_selector, container, false)
btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }
return rootView
}
}
`
Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经回答[这里](lateinit属性尚未初始化).但这是由于黄油刀库问题但我的情况有所不同.完全不同.在我的情况下,当我在我的基本活动中使用匕首注入属性时,它显示我的错误引起:kotlin.UninitializedPropertyAccessException:lateinit属性pref尚未初始化
但是当我在我的子活动(登录活动)中使用它时,它的工作正常.
例如.pref.setLanguage("abc") - >它在登录活动中工作正常,但在基本活动中引发错误
这是我的代码:
BaseActivity
abstract class BaseActivity : AppCompatActivity() {
@Inject
lateinit var pref: AppSharedPreferences
@Inject
lateinit var utils: Utils
lateinit var mCurrentLanguage: String
protected lateinit var progressBarUtils: ProgressBarUtils
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
progressBarUtils = ProgressBarUtils(this)
mCurrentLanguage = "EN"
pref.setSelectedLanguage(mCurrentLanguage)
}
}
Run Code Online (Sandbox Code Playgroud)
LoginActivity
class LoginActivity : BaseActivity() {
private val TAG = this.javaClass.name
lateinit var loginViewModel: LoginViewModel
@Inject
lateinit var viewModelFactory: LoginViewModelFactory
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
AndroidInjection.inject(this)
loginViewModel …Run Code Online (Sandbox Code Playgroud)