我的活动有一个多选择对话框。我有一个布尔数组来跟踪从对话框中选择的项目。所以我希望每次单击一个项目以使我的数组上的相应位置为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)。我不知道该怎么做
答案 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方法(或其他一些初始化方法),如果可能,因为它看起来与对话框创建无关,但这只是一个样式/可维护性问题。