虽然我已经意识到这个问题曾经被问过一两次但是我仍然不知道我应该如何通过为每个checkboxpreferences创建一个监听器来解决问题。
关于如何解决这个问题的任何建议?
private void setQueuePreferences(JSONObject[] qInfo)
{
PreferenceCategory QueueCategory = (PreferenceCategory)findPreference("category_queues");
CheckBoxPreference[] cbox_queues = new CheckBoxPreference[qInfo.length];
for(int i = 0; i < qInfo.length; i++)
{
cbox_queues[i] = new CheckBoxPreference(this);
cbox_queues[i].setKey("queue_" + i);
// Formatting the queue title
String name = qInfo[i].optString("name").replace("-", " ");
cbox_queues[i].setTitle(name);
if(qInfo[i].optString("active").contentEquals("1"))
cbox_queues[i].setChecked(true);
else
cbox_queues[i].setChecked(false);
QueueCategory.addPreference(cbox_queues[i]);
cbox_queues[i].setOnPreferenceClickListener(new OnPreferenceClickListener()
{
public boolean onPreferenceClick(Preference preference)
{
final String[] param = new String[1];
param[0] = qInfo[i].optString("name");
if(cbox_queues[i].isChecked())
{
new JoinQueueTask().execute(param);
}
else
new LeaveQueueTask().execute(param);
}
});
}
}
答案 0 :(得分:1)
您可以将数组标记为final,并仍然更改其中的元素。但是,您无法为该变量分配不同的数组。
对于i变量,你可以在循环中创建一个新的final int,如下所示:
final int ii = i;
然后使用那个。
答案 1 :(得分:1)
试试这个:
private void setQueuePreferences(JSONObject[] qInfo) {
PreferenceCategory QueueCategory = (PreferenceCategory)findPreference("category_queues");
CheckBoxPreference[] cbox_queues = new CheckBoxPreference[qInfo.length];
for(int i = 0; i < qInfo.length; i++) {
final JSONObject qInfoCurrent = qInfo[i];
final CheckBoxPreference cbp = new CheckBoxPreference(this);
cbox_queues[i] = cbp;
cbp.setKey("queue_" + i);
// Formatting the queue title
String name = qInfoCurrent.optString("name").replace("-", " ");
cbp.setTitle(name);
if(qInfoCurrent.optString("active").contentEquals("1"))
cbp.setChecked(true);
else
cbp.setChecked(false);
QueueCategory.addPreference(cbp);
cbp.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
final String[] param = new String[1];
param[0] = qInfoCurrent.optString("name");
if(cbp.isChecked()) {
new JoinQueueTask().execute(param);
} else
new LeaveQueueTask().execute(param);
}
});
}
}