【问题标题】:AlertDialog with switch statement in androidandroid中带有switch语句的AlertDialog
【发布时间】:2013-11-29 05:45:22
【问题描述】:

我正在第一次为我的客户制作安卓应用程序。他需要在应用程序中实现多种语言。所以,我放了一些相关的布局,点击它会变成特定的语言。但是现在,要放置一个“警报对话框”以进行选择确认。为此,我制作了一个警告框并在肯定按钮中实现了一个 switch 语句。但是,它不起作用,我没有任何错误。:(这是我的一段代码:

rl_german.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        AlertDialog();; 

    }
});
rl_english.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

    AlertDialog();

    }
});
  }

 private void AlertDialog()
   {
        new AlertDialog.Builder(this)
        .setTitle("")
        .setMessage("Are you sure you want to change the language?")
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {

 public void onClick(DialogInterface dialog, int which) { 
        switch(which){
        case R.id.rl_english:
            startActivity(new Intent(Language.this,HomeActivity2.class));   
        break;
        case R.id.rl_german:

        break;
        case R.id.rl_french:

        break;
    }
    }
 })
.setNegativeButton("No", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) { 
        // do nothing
    }
 })
 .show();
} 

但是,如果我直接在“OnClick”方法中调用“startActivity”。它工作正常。任何人都可以帮助我吗?在此先感谢:)

【问题讨论】:

  • 先关闭对话框,然后开始新的活动...
  • 代替 Language.this 使用 getApplicationContext() 并告诉我。
  • 它不工作的朋友:(
  • 看我的回答。您正在与错误的id进行比较

标签: android switch-statement android-alertdialog


【解决方案1】:

这里的问题是which指的是ButtonAllertDialog.Builder中点击的id(例如BUTTON_POSITIVEBUTTON_NEGATIVE);

您可以做的是将Intent 变量作为成员变量(在方法之外声明),然后以该变量作为参数调用startActivity()。简短的例子:

public class MyActivity extends Activity
{
     Intent i;

     public void onCreate(...)
     {
         ...
         rl_english.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View v) {
         i = new Intent(Language.this,HomeActivity2.class);
         AlertDialog();
      }

 private void AlertDialog()
{
    new AlertDialog.Builder(this)
    .setTitle("")
    .setMessage("Are you sure you want to change the language?")
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int which) { 
        startActivity(i));
}

这是未经测试的快速代码,因此您可能需要根据需要进行调整,添加额外的代码和括号等...重点是,您正在尝试将 which 与在您的 @ 中单击的 Button 进行比较987654332@ 但这实际上是指在您的AlertDialog 中单击的Button。您需要实例化Intent,具体取决于单击哪个Acitvity Button,然后如果单击AlertDialog 中的正Button,则启动Activity;如果单击负Button,则取消。

【讨论】:

  • 非常感谢我亲爱的朋友.. :) 实际上我对这个问题有点紧张。因为,我不知道如何解决这个问题。你救了我.. :) 谢谢!!
【解决方案2】:

我认为,问题在于,您的开关基于来自 onClick(DialogInterface dialog, int which) 的“which”参数工作,但您正在使用“R.id.rl_english”进行检查。您的任何情况都不符合条件,因为“哪个”给出了单击的按钮而不是任何视图的 id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2018-09-16
    相关资源
    最近更新 更多