有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在警报对话框的onclick侦听器中访问非final变量而不使其成为final

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        String choice="";
        AlertDialog.Builder builder1 = new AlertDialog.Builder(parent.getContext());
        builder1.setMessage("Do you want to accept this vendor's quote?");
        builder1.setCancelable(true);
        builder1.setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
             choice= "true" //cant access non final variable
            }
        });
        builder1.setNegativeButton("No",
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });

        AlertDialog alert11 = builder1.create();
        alert11.show();
if(choice.equals("true"){
// do something
}

    }

如何访问“choice”变量而不使其成为最终变量,或者是否有其他方法来了解用户是否按下了正按钮或负按钮


共 (4) 个答案

  1. # 1 楼答案

    干净的方法是让onClick方法调用父类中的“setter”方法

    public class Activity {
      private boolean choice = false;
    
    ...
    
      //In your method
      builder1.setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int id) {
                    setChoice(true);
                  }
                });
    
      }
    
    ...
    
      public void setChoice(boolean choice) {
        this.choice = choice;
      }
    }
    
  2. # 2 楼答案

    变量必须是最终变量,例如Eclipse表示:

    Cannot refer to a non-final variable choice inside an inner class defined in a different method

  3. # 3 楼答案

    在类定义的正外部声明变量

  4. # 4 楼答案

    将变量声明为类中的字段:

    public class YourClass {
        private String choice;
        ...
    }