当前位置: 首页 > 知识库问答 >
问题:

接收数据后更改启动器活动

端木志诚
2023-03-14
binding.doneButton.setOnClickListener {
            checkValid()
            if (valid){

                Intent(this, DailyActivity::class.java).also{
                    it.putExtra("EXTRA_BMI", calculateBmi().round(1))
                    it.putExtra("EXTRA_BMR", calculateBmr().round(2))
                    startActivity(it)
                }
            }
        }

我的应用程序的MainActivity从用户那里获取一些数据来计算他/她的BMI和BMR,并将这些数据用于应用程序的主要部分,即另一个名为DailyActivity的活动。我希望这样,用户第一次启动应用程序时,它会要求提供数据。但在第一次之后,每次用户启动应用程序时,都应使用之前输入的数据直接启动DailyActivity。(按下后退按钮也不应显示MainActivity)。我如何实现这一点?

共有1个答案

权浩阔
2023-03-14

试试这个,用你自己的代码改变这个活动

class MainActivity2 : AppCompatActivity() {

    lateinit var sharedPreference: SharedPreferences

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

        binding.doneButton.setOnClickListener {
            checkValid()
            if (valid){


                //save data to preferences
                val editor = sharedPreference.edit()
                editor.putBoolean("IS_NOT_FIRST_TIME", true)
                editor.putFloat("EXTRA_BMI",calculateBmi().round(1))
                editor.putFloat("EXTRA_BMR",calculateBmr().round(2))
                editor.apply()
                
                Intent(this, DailyActivity::class.java).also{
                    it.putExtra("EXTRA_BMI", calculateBmi().round(1))
                    it.putExtra("EXTRA_BMR", calculateBmr().round(2))
                    startActivity(it)
                }
            }
        }
    }


    override fun onResume() {
        super.onResume()
        sharedPreference =  getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
        
        // cek preference for previously entered data
        if (sharedPreference.getBoolean("IS_NOT_FIRST_TIME", false )){
            Intent(this, DailyActivity::class.java).also{
                it.putExtra("EXTRA_BMI", sharedPreference.getFloat("EXTRA_BMI", 0.0f))
                it.putExtra("EXTRA_BMR", sharedPreference.getFloat("EXTRA_BMI", 0.0f))
                startActivity(it)
            }
        }
    }
}

每次打开活动时,它都会检查是否输入了数据。如果不是第一次,它将使用来自首选项的数据执行自动意图到日常活动

 类似资料:
  • 我有一个应用程序,可以通过谷歌云消息接收消息。我需要在收到云消息时自动启动一个活动,必要时唤醒设备。 虽然它似乎是一个糟糕的UI设计,其中一些东西被有力地显示给用户,但这个应用程序对用户的工作是至关重要的,所以当一个云消息到达时,能够清楚地查看它对用户来说是更有用的。 当收到云消息时,我尝试调用,当应用程序位于后台时,它可以正常工作。但是,一旦该应用程序从最近的应用程序列表中删除,新活动就不会启动

  • 我已经实现了这样的接收器(在清单文件中) 如果电话的状态改变,则调用记录器广播接收器。一切都很好。但是,如果我重新启动设备,接收器永远不会被调用,直到我运行我的应用程序。 我需要在启动后注册(不调用)这个接收器。 许多感谢, [编辑] 我通过向清单文件添加以下接收者解决了这个问题 不过,我没有在java代码中注册RecorderBroadcastReceiver。我只加了上面的接收器。这意味着从应

  • (与我刚刚发布的另一个问题略有不同,如果这违反了规则,请道歉) 在我的活动1中,我正在设置一些共享首选项,接下来我将通过意图启动另一个活动2,并从中设置一些文本视图。。。这一切都很好。 这就是我的问题。在我的第一个活动1中,我有一个带有挂起意图的警报管理器,这个挂起意图是一个用于锁定手机的广播接收器,然后启动活动2。这个活动和上面提到的第二个活动是一样的。但是,当此活动从启动时,没有任何文本视图从

  • 我目前正在使用SharedReferences跟踪通过AlarmManager启动的BroadcastReceiver中要执行工作的项列表。除了一个特定的场景外,一切都很好。当我触发一个新项目来执行工作时,让它完成工作,然后删除该项目(全部通过SharedReferences编辑),它在应用程序运行时工作得很好。当列表中没有任何内容,我打开任务管理器并终止应用程序时,该项突然出现在Broadcas

  • 我有一个问题,我的活动正在进行一个网络调用,当网络调用完成时,它使用从调用中收到的JSON对象的数据对活动进行了一些更改,然后将对象传递给同一活动中的片段。这些碎片在一个台面上。 我有同样的问题,我在这里问了这个问题,但我似乎也有同样的问题,即使在没有改变任何重要的东西后,它有了一点作用。我只是添加了更多我想要更改的字段? 我遇到的问题是,如果我使用system.out.println(),它会打

  • 我已将要首先运行的活动从更改为另一个活动。我通过编辑Android清单并复制: 去我想要的活动。现在,当我运行或调试我的应用程序在我的android设备上成功安装,但它不会自动启动像之前我必须点击图标,我得到下面的错误,如果我运行它在模拟器正确的活动启动只在第一次安装后,它只是忽略该活动,并且总是启动。 请帮忙。 我的全部清单: