roo*_*per 2 android android-alertdialog
我让数组通过警报对话框选择多个选项 如果数组已满,我想禁用选择
我已经能够在达到限制后停止向数组添加项目,但无法禁用复选框
AlertDialog.Builder builder=new AlertDialog.Builder(this);
View view=inflater.inflate(R.layout.dialog_genre,null,false);
builder.setView(view).setTitle("Select Genres");
builder.setMultiChoiceItems(array, checkedGenres, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if(isChecked) {
if (!selectedgenre.contains(String.valueOf(which)))
if(selectedgenre.size()<5)
{
selectedgenre.add(String.valueOf(which));
checkedGenres[which]=true;
}
else{
Toast.makeText(getApplicationContext(),"you can't add more genres",Toast.LENGTH_LONG).show();
}
}
else if (selectedgenre.contains(String.valueOf(which)))
{
selectedgenre.remove(String.valueOf(which));
checkedGenres[which]=false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
ListView 中的视图是可重用的,因此项目并没有真正链接到视图。但是,您可以在将视图添加到 AlertDialog 的 ListView 中的 ListView 时启用或禁用该视图。ViewGroup.setOnHierarchyChangeListener允许您这样做。
final CharSequence[] items = new CharSequence[]
{"9×19mm Sidearm", ".40 Dual Elites", "228 Compact", "Night Hawk .50C"};
boolean[] checkedItems = new boolean[]{false, false, true, true};
final boolean[] disabledItems = new boolean[]{false, true, false, true};
Context context = this;
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
dialogBuilder.setTitle("Select your pistol");
dialogBuilder.setMultiChoiceItems(items, checkedItems,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean checked) {
}
});
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.getListView().setOnHierarchyChangeListener(
new ViewGroup.OnHierarchyChangeListener() {
@Override
public void onChildViewAdded(View parent, View child) {
CharSequence text = ((AppCompatCheckedTextView)child).getText();
int itemIndex = Arrays.asList(items).indexOf(text);
child.setEnabled(disabledItems[itemIndex]);
}
@Override
public void onChildViewRemoved(View view, View view1) {
}
});
alertDialog.show();
Run Code Online (Sandbox Code Playgroud)
请注意,setEnable不会避免 clickListeners 触发。如果您不想让您的复选框点击添加child.setOnClickListener(null)。
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |