多选对话框不会让我在单击时更改数组

时间:2010-05-11 18:11:34

标签: android arrays scope

我的活动有一个多选择对话框。我有一个布尔数组来跟踪从对话框中选择的项目。所以我希望每次单击一个项目以使我的数组上的相应位置为true。在返回之前,在onCreateDialog中创建了数组。

public Dialog onCreateDialog(int id) {
  userlistlocal=getuserlist(username);
  boolean[] usernamechecked=new boolean[userlistlocal.length/3];
  Arrays.fill(usernamechecked,false);         
  return new AlertDialog.Builder(Newevent.this)
        .setIcon(R.drawable.ic_menu_invite)
        .setTitle("Add People")
        .setMultiChoiceItems(userselectionlistlocal,
                null,new DialogInterface.OnMultiChoiceClickListener() {


                    public void onClick(DialogInterface dialog, int whichButton,
                            boolean isChecked) { 

                        /* User clicked on a check box do some stuff */
                     usernamechecked[whichButton]=isChecked;<-------HERE
                    }
                })
        .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

                /* User clicked Yes so do some stuff */
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

                /* User clicked No so do some stuff */
            }
        })
       .create();

 }

但是当我在onClick方法中放入我的布尔数组时,它说它必须是最终的(不能引用在不同方法中定义的内部类中的非最终变量usernamechecked)。我不知道该怎么做

2 个答案:

答案 0 :(得分:0)

如果未声明final,则无法访问数组。但如果声明为final,则必须考虑不再修改它。

解决此问题的方法是将OnMultiChoiceClickListener定义为不是匿名内部类。例如,您可以将其定义为同一类中的内部类,甚至可以将其定义为单独的类。

答案 1 :(得分:0)

您在onCreateDialog方法中定义了usernamechecked,它只存在于此方法的范围内。您应该将其定义为活动类或内部类的成员。由于它的大小取决于对getuserlist的调用,我假设它是您的活动类的一种方法,我会将其添加为您的活动类的成员,尽管这取决于您。

将usernamechecked定义为您的活动类的成员:

private boolean usernamechecked[];

我也会搬家

userlistlocal=getuserlist(username);
usernamechecked=new boolean[userlistlocal.length/3];
Arrays.fill(usernamechecked,false); 

到你的onCreate方法(或其他一些初始化方法),如果可能,因为它看起来与对话框创建无关,但这只是一个样式/可维护性问题。