Как правильно передать контекст в диалог с Kotlin? - PullRequest
0 голосов
/ 09 июля 2019

Извините за дурацкий вопрос, но просто пытаюсь Котлина немного запутаться. От MainActivity я пытаюсь вызвать диалог с утилизатором. Часть переработчика работает нормально, потому что я пробовал это без отдельного диалога Но когда я пытаюсь вызвать его в диалоге, происходит сбой с нулевым указателем. Я думаю, он не может распознать представление, но я передаю контекст в качестве примера из стека, но он не работает

Диалог класс

class LanguageDialog(context: Context) : Dialog(context), LanguageAdapter.ItemClickListener{
    private var mRussianFlagLink = "https://cdn3.iconfinder.com/data/icons/142-mini-country-flags-16x16px/32/flag-russia2x.png"
    private var mEnglishFlagLink = "https://cdn3.iconfinder.com/data/icons/142-mini-country-flags-16x16px/32/flag-united-kingdom2x.png"

    private lateinit var mLanguageAdapter : LanguageAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_languages)

        val mLanguageList : MutableList<Language> = mutableListOf(Language("Russian", mRussianFlagLink), Language("English", mEnglishFlagLink))

        val mRecyclerView = findViewById<RecyclerView>(R.id.recycle_languages)
        mRecyclerView.layoutManager = LinearLayoutManager(context)
        mLanguageAdapter = LanguageAdapter(mLanguageList, context)
        mLanguageAdapter.setClickListener(this)
        mRecyclerView.adapter = mLanguageAdapter
    }

    override fun onItemClick(view: View, position: Int) {
        Log.d("Test", "CLICK")
    }
}

Сбой здесь

            mRecyclerView.layoutManager = LinearLayoutManager(context)

Звонок с MainActivity

private fun callLanguageDialog() {
    val mDialog = LanguageDialog(this)
    mDialog.show()

Журналы ошибок

FATAL EXCEPTION: main
                                                                     Process: com.example.a3802256.zzzz, PID: 9833
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.a3802256.zzzz/com.example.a3802256.zzzz.main.MainActivity}: java.lang.IllegalStateException: mRecyclerView must not be null
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                         at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at android.os.Looper.loop(Looper.java:154)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                      Caused by: java.lang.IllegalStateException: mRecyclerView must not be null
                                                                         at com.example.a3802256.zzzz.LanguageDialog.onCreate(LanguageDialog.kt:26)
                                                                         at android.app.Dialog.dispatchOnCreate(Dialog.java:395)
                                                                         at android.app.Dialog.show(Dialog.java:294)
                                                                         at com.example.a3802256.zzzz.main.MainActivity.callLanguageDialog(MainActivity.kt:20)
                                                                         at com.example.a3802256.zzzz.main.MainActivity.onCreate(MainActivity.kt:15)
                                                                         at android.app.Activity.performCreate(Activity.java:6679)
                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                                                                         at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:154) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

1 Ответ

0 голосов
/ 09 июля 2019

Попробуйте использовать исходный контекст в init и удалите контекст из Dialog(context) в LanguageDialog

class LanguageDialog(context: Context) : Dialog, LanguageAdapter.ItemClickListener {
    private var context: Context? = null
    init
     {
       this.context = context
     }
    private var mRussianFlagLink = "https://cdn3.iconfinder.com/data/icons/142-mini-country-flags-16x16px/32/flag-russia2x.png"
    private var mEnglishFlagLink = "https://cdn3.iconfinder.com/data/icons/142-mini-country-flags-16x16px/32/flag-united-kingdom2x.png"

    private lateinit var mLanguageAdapter : LanguageAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_languages)

        val mLanguageList : MutableList<Language> = mutableListOf(Language("Russian", mRussianFlagLink), Language("English", mEnglishFlagLink))

        val mRecyclerView = findViewById<RecyclerView>(R.id.recycle_languages)
        mRecyclerView.layoutManager = LinearLayoutManager(context)
        mLanguageAdapter = LanguageAdapter(mLanguageList, context)
        mLanguageAdapter.setClickListener(this)
        mRecyclerView.adapter = mLanguageAdapter
    }

    override fun onItemClick(view: View, position: Int) {
        Log.d("Test", "CLICK")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...