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

如何在警报对话框中运行两个函数,单击“警报”诊断为正按钮?

周锐
2023-03-14

我是Android新手,我在我的项目中创建了一个基本的警报对话框,它只有[一条消息和一个积极按钮和一个消极按钮],消息是一个问题,询问[你想从账户中退出吗?],按下消极按钮关闭警报对话框,按下积极按钮也会关闭警报对话框,什么也不做。我想消极按钮只是关闭警报对话框,就像它一样,但是当我按下积极按钮时,它会为我做两件事[1-从应用程序中退出,2-开始我的活动,称为LoginActivity.kt]

注意:我已经通过另一个布局activity_sign_out完成了这两项工作。xml,它包含一个按钮来完成这两项工作。但我想做的是,当alertdialog显示时,只需按“正”按钮,就可以实现这两个功能。

我希望我的问题对你来说是清楚的。

我试着这样做,但它不起作用,这是我的代码:

1-我的警报对话框:

import android.content.DialogInterface
import android.content.Intent
import android.content.res.Configuration
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.Toolbar
import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.navigation.NavigationView
import com.google.firebase.auth.FirebaseAuth
import java.util.*

class DashboardActivity : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
private lateinit var binding: ActivityDashboardBinding
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    loadLocale()
    binding = ActivityDashboardBinding.inflate(layoutInflater)
    val view = binding.root
    setContentView(view)
    val drawerLayout = findViewById<DrawerLayout>(R.id.drawerLayout)
    val toolbar = findViewById<Toolbar>(R.id.toolbar)
    val navView = findViewById<NavigationView>(R.id.nav_view)
    val toggle = ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.open,R.string.close)
    toggle.isDrawerIndicatorEnabled = true
    supportActionBar?.setDisplayShowTitleEnabled(false)
    drawerLayout.addDrawerListener(toggle)
    toggle.syncState()
    navView.setNavigationItemSelectedListener {
        when(it.itemId){
            R.id.itmSignOut ->startActivity(Intent(this,SignOut::class.java))
            R.id.itmLanguage ->showChangeLanguageDialog()
            R.id.itmProfile ->basicAlert()
        }
        true
    }
}
private fun basicAlert(){
    val positiveButtonClick = { _: DialogInterface, _: Int -> }
    val negativeButtonClick = { _: DialogInterface, _: Int -> }
    val builder = AlertDialog.Builder(this)
    with(builder) {
        setMessage(R.string.do_you_want_to_sign_out_from_your_my_conquer_account)
        setPositiveButton(R.string.yes, ({ _: DialogInterface, _: Int ->
            positiveButtonClick
            auth.signOut()
            startActivity(Intent(this,LoginActivity::class.java))
            finish()
        }))
        setNegativeButton(R.string.no, negativeButtonClick)
        show()
    }
}

2-我的注销。节:

class SignOut : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
private lateinit var binding: ActivitySignOutBinding
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivitySignOutBinding.inflate(layoutInflater)
    setContentView(R.layout.activity_sign_out)
    val view = binding.root
    setContentView(view)
    initData()
}
private fun initData(){
    auth = FirebaseAuth.getInstance()
    setUserEmail()
    clickListener()
}
private fun clickListener(){
    binding.btnSignOut.setOnClickListener{
        auth.signOut()
        startActivity(Intent(this,LoginActivity::class.java))
        finish()
    }
}
private fun getCurrentUserEmail():String? {
    return auth.currentUser?.email
}
@SuppressLint("SetTextI18n")
private fun setUserEmail(){
    binding.tvUserEmail.text = "Welcome "+getCurrentUserEmail()
}
}

3-和activity_sign_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SignOut">

    <TextView
        android:id="@+id/tvUserEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/welcome"
        android:textAlignment="center"
        android:textSize="15dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btnSignOut"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginStart="20dp"
        android:layout_marginEnd="20dp"
        android:background="@drawable/custom_button"
        android:text="@string/sign_out"
        android:textAllCaps="false"
        android:textColor="@color/White"
        android:textSize="18dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.8"
        tools:ignore="TouchTargetSizeCheck,TextContrastCheck" />

</androidx.constraintlayout.widget.ConstraintLayout>

最后,在运行应用程序并编写修复代码之后,我添加了auth。signOut()startActivity(Intent(this,LoginActivity::class.java))finish()发送到我的Alertdialog,但它显示了red Intent:[提供的参数不能调用以下任何函数。

  • (内容!,类

谢谢你帮助我!当心。

共有1个答案

公胤运
2023-03-14

正如您在Android Studio中看到的,<code>with</code>块中的<code>这个</code>指的是<code>AlertDialog。生成器实例。要提及“活动”,您必须明确表示:

setPositiveButton(R.string.yes) { _: DialogInterface, _: Int ->
    auth.signOut()
    startActivity(Intent(this@DashboardActivity, LoginActivity::class.java))
    finish()
}
 类似资料:
  • 我是Robotium的新手。我已经使用对话框生成器创建了一个警报对话框,并使用show命令调用了它。默认情况下,我可以使用Robotium触发“确定”按钮,但我不能对“取消”按钮进行同样的操作。由于对话框没有与id相关联,我不确定如何获得按钮的id。下面是对话框的代码 我在测试类中用来触发'OK'按钮的代码是 如何为“取消”按钮做同样的事情?提前谢了。

  • 最近我从支持库切换到com.google.android.Material:Material:1.0.0 但是现在我遇到了一个问题,在这个页面中有一个注释https://github.com/Material-Components/Material-Components-android/blob/master/docs/geting-started.md 注意:使用Material Compone

  • 我正在使用新的JavaFX Alert类(Java1.8_40),并尝试在exibition文本中使用HTML标记,但到目前为止还没有成功。下面是我正在尝试做的一个例子。 有没有人知道这是不是真的可能,给我举个例子? 提前道谢。

  • 我不经常发出警报,但每次发出警报时,我都要花一段时间阅读文档并找出如何发出警报。既然我已经做了几次了,我将在下面写一个答案,我可以在将来再回来。具体来说,我想比较 一个按钮(确定) 如果能将这三种常见警报类型的基本代码放在一个位置,以便于将来参考和修改,那就太好了。这个问题是问一个按钮怎么做。

  • 我在antoher的项目中有完全相同的代码,但它在这里继续崩溃。我有。我真的不确定问题出在哪里。我尝试过切换gradle版本,从切换到。不管怎样,一切都失败了

  • 我已经将我的项目迁移到androidX,我想实现一个带有用户积极和消极反馈的报警对话框。 我正在使用以下代码: 但我在运行应用程序时遇到了这个错误: IllegalStateException:您需要在此活动中使用theme.AppCompat主题(或后代)。