从alertDialog中的onClickListener访问全局变量

时间:2015-11-03 12:51:02

标签: java android global-variables onclicklistener

enter image description here

在标记的行str中,要求我将str设置为本地变量

public void alertShow(String s){
    //Game Ended...!!!
    android.support.v7.app.AlertDialog.Builder alertDialog = new android.support.v7.app.AlertDialog.Builder(this);

    // Setting Dialog Title
    if(s.equals("You") || (s.contains("P")))
        alertDialog.setTitle("Congratulations...");
    else
        alertDialog.setTitle("Game's Up...");

    // Setting Dialog Message
    if(s.equals("You") || s.contains("P"))
        alertDialog.setMessage(s+" Win The Game...");
    else
        alertDialog.setMessage("You Lose... I Win...");

    final ImageView img = new ImageView(this);
    if(s.equals("You") || (s.contains("P")))
        img.setImageResource(R.drawable.firecrackers);
    else
        img.setImageResource(R.drawable.mmm);

    alertDialog.setView(img);

    // Setting Dialog Cancellation
    alertDialog.setCancelable(false);

    // Setting Positive "Yes" Button

    //==================Here Problem Starts==========================

    SessionClass sessionClass = new SessionClass();
    final String str = sessionClass.getPlayer();
    alertDialog.setPositiveButton("Try Again", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            Intent i;
            if (str.contains("1"))
                i = new Intent(MainActivity2.this, Toss.class);
            else
                i = new Intent(MainActivity2.this, Game2.class);
            startActivity(i);
            finish();
        }
    });

    //=====================================================

    // Setting Negative "NO" Button
    alertDialog.setNegativeButton("Main Menu", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            Intent i = new Intent(MainActivity2.this, MainActivity2.class);
            startActivity(i);
            finish();
        }
    });

    // Showing Alert Message
    alertDialog.show();
}

我想从onClickListener访问str,它是在onClickListener之外声明的。 我尝试了以下代码,但它没有访问变量。

3 个答案:

答案 0 :(得分:2)

您需要将onClickListener变量标记为{{1}},然后才能从{{1}}

访问它

答案 1 :(得分:0)

来自annonymous inner classes

的文档

访问封闭范围的本地变量,以及声明和访问匿名类的成员

  

与本地类一样,匿名类可以捕获变量;他们对封闭范围的局部变量具有相同的访问权限:

     

匿名类可以访问其封闭类的成员。

     

匿名类无法访问其封闭范围内未声明为最终或有效最终的局部变量。

将您的字符串标记为final,然后就可以使用它了。

答案 2 :(得分:0)

最后,应该让你在AlertDialoge中访问你的变量, 你能否确认你实际上从这个方法获得了字符串(getPlayer();)?

我问这个的原因是(你没有检查null)并且如果该方法返回null,那么当你想检查null是否为“1”时你会得到错误。