您好,
我创建了 MultiChoice AlertDialog AlertDialog有五个 列出带有复选框的项目。当我 选中第一个复选框,w.r.t这个 如果列表中的其他复选框 检查他们是否不加控制 自动反之亦然。
我正在检查 isChecked 状态 在 onClick 方法中 OnMultiChoiceClickListener()并调用 showDialog(DIALOG_MULTIPLE_CHOICE); 更新布尔[] checkedItems; 重新创建 对话,但我无法实现。 如果您有任何建议请直接 我正确的方式。
有没有办法重新创建单击按钮单击的AleartDialog onClick事件。
下面的一些示例代码:
case DIALOG_MULTIPLE_CHOICE:
final String[] lJobTypes = { "Item1", "Item2", "Item3","Item4", "Item5" };
return new AlertDialog.Builder(JoblistPage.this)
// .setIcon(R.drawable.logo)
.setTitle("Title Here")
// .setCustomTitle(m_Title)
.setMultiChoiceItems(lTypes, m_Selections,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog,int whichButton, boolean isChecked) {
/* User clicked on a check box do some stuff */
if (isChecked) {
m_CheckCount++;
//Toggle the Radio button Check status
} else {
m_CheckCount--;
}
}
}).setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
}).create();
此致 维纳亚克
答案 0 :(得分:21)
不要重新创建对话框,只需在当前对话框中切换复选框即可。您的onMultiChoiceClickListener可以跟踪当前活动的复选框(如果有),并在选择其他复选框时取消选中它。这是一个经过完整测试的工作示例:
package com.stackoverflow.beekeeper;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.Toast;
public class StackOverflowTest extends Activity {
/** Called when the activity is first created. */
@Override public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
private int mSelected = -1;
@Override protected void onResume() {
super.onResume();
final Builder build = new Builder(this);
build.setTitle("List selection");
build.setCancelable(true);
final String[] strings = new String[]{"Cow", "Horse", "Goat"};
final OnMultiChoiceClickListener onClick =
new OnMultiChoiceClickListener() {
@Override public void onClick(final DialogInterface dialog,
final int which, final boolean isChecked) {
if (isChecked) {
if ((mSelected != -1) && (mSelected != which)) {
final int oldVal = mSelected;
final AlertDialog alert = (AlertDialog)dialog;
final ListView list = alert.getListView();
list.setItemChecked(oldVal, false);
}
mSelected = which;
} else
mSelected = -1;
}
};
build.setMultiChoiceItems(strings, null, onClick);
build.setPositiveButton("Done", new OnClickListener() {
@Override public void onClick(final DialogInterface dialog,
final int which) {
String message = null;
if (mSelected == -1)
message = "You didn't select anything.";
else
message = "You selected '" + strings[mSelected] + "'";
Toast.makeText(StackOverflowTest.this, message, Toast.LENGTH_LONG).show();
}
});
build.show();
}
}
需要注意的一点是:必须在“setMultiChoiceItems”调用中为“checkedItems”参数指定“null” - 否则“setItemChecked”调用将无法按预期工作。最终会使用该数组存储已检查的状态,而“setItemChecked”将无法正确更新它,因此一切都会混淆。奇怪,但确实如此。
答案 1 :(得分:6)
我一直在努力解决这个问题。我维护每个项目的“已检查”状态数组,并在视觉上更改setItemChecked值时更改该值。然后当单击完成按钮时,我遍历“checked”以将值保存到我的db。
builder.setMultiChoiceItems(cats, checked, new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int item, boolean check) {
if(cats[item].equals("All Categories")) {
AlertDialog d = (AlertDialog) dialog;
ListView v = d.getListView();
int i = 0;
while(i < cats.length) {
v.setItemChecked(i, check);
checked[i] = check;
i++;
}
}
checked[item] = check;
}
});
答案 2 :(得分:2)
您是否尝试在对话框中将setMultiChoiceItems
替换为setSingleChoiceItems
?