首页 > 解决方案 > Kotlin:在主要活动中以 OnClick 为条件在辅助活动中设置变量

问题描述

我有一个有四个卡片视图的主要活动。我希望每个卡片视图在单击时都转到特定于该卡片的多项选择测验。在我的问题活动中,我需要确定点击了哪些卡片视图,以确定应该调用哪组问题。我尝试在我的主要活动中使用布尔值,但无法在我的问题活动中引用它们。

主要活动

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        c1.setOnClickListener {
            val intent = Intent(this, QuestionsActivity::class.java)
            intent.putExtra("boolean_a", true);
            startActivity(intent)
            finish()
        }

        c2.setOnClickListener {
            val intent = Intent(this, QuestionsActivity::class.java)
            intent.putExtra("boolean_b", true);
            startActivity(intent)
            finish()
        }

        c3.setOnClickListener {
            val intent = Intent(this, QuestionsActivity::class.java)
            intent.putExtra("boolean_c", true);
            startActivity(intent)
            finish()
        }

        c4.setOnClickListener {
            val intent = Intent(this, QuestionsActivity::class.java)
            intent.putExtra("boolean_d", true);
            startActivity(intent)
            finish()
        }
    }
}

我的intent.putExtra("booleanA", true)主要活动和次要活动中的if boolean声明和var booleanA = getIntent().getExtras()!!.getBoolean("booleanA")声明使应用程序崩溃。如果我删除intent.putExtra("booleanA", true)var booleanA = getIntent().getExtras()!!.getBoolean("booleanA")删除 if 语句,只留下mQuestionsList = Constants.getQuestions(),应用程序不再崩溃

import android.content.Intent
import android.graphics.Color
import android.graphics.Typeface
import android.os.Bundle
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.activity_questions.*

class QuestionsActivity : AppCompatActivity(), View.OnClickListener {

    private var mCurrentPosition:Int = 1
    private var mQuestionsList:ArrayList<Questions>? = null
    private var mSelectedOptionPosition:Int = 0
    private var mCorrectAnswers: Int = 0
    var booleanA = getIntent().getExtras()!!.getBoolean("booleanA")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_questions)
        if (booleanA){
            mQuestionsList = Constants.getQuestions()
        }
        setQuestion()
        radio_button1.setOnClickListener(this)
        radio_button2.setOnClickListener(this)
        radio_button3.setOnClickListener(this)
        radio_button4.setOnClickListener(this)
    }

标签: androidkotlin

解决方案


你应该这样做

class QuestionsActivity : AppCompatActivity(), View.OnClickListener {

private var mCurrentPosition:Int = 1
private var mQuestionsList:ArrayList<Questions>? = null
private var mSelectedOptionPosition:Int = 0
private var mCorrectAnswers: Int = 0

//don't get the intent data here
var booleanA: Boolean = false

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

    //get the intent data here
    booleanA = getIntent().getExtras()!!.getBoolean("booleanA")

    if (booleanA){
        mQuestionsList = Constants.getQuestions()
    }
    setQuestion()
    radio_button1.setOnClickListener(this)
    radio_button2.setOnClickListener(this)
    radio_button3.setOnClickListener(this)
    radio_button4.setOnClickListener(this)
}

推荐阅读