嗨,
我创建了MultiChoice AlertDialog AlertDialog有五个带复选框的列表项.当我选中First复选框时,如果选中了列表中的其他复选框,则会自动取消选中它们,反之亦然.
我正在检查onMultiChoiceClickListener()的onClick方法中 的isChecked状态并调用 showDialog(DIALOG_MULTIPLE_CHOICE); 通过更新boolean [] 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();
Run Code Online (Sandbox Code Playgroud)
关心Vinayak
bee*_*per 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();
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是:必须在"setMultiChoiceItems"调用中为"checkedItems"参数指定"null" - 否则"setItemChecked"调用将无法按预期工作.它最终会使用该数组存储已检查的状态,而"setItemChecked"将无法正确更新它,因此一切都会混淆.奇怪,但是真的.
很长一段时间我一直在努力解决这个问题.我维护每个项目的"已检查"状态数组,并在视觉上更改setItemChecked值时更改该值.然后,当单击完成按钮时,我遍历"已选中"以将值保存到我的数据库中.
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;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16593 次 |
| 最近记录: |