gpt4 book ai didi

android - 如何在 MultiSelection Spinner Android 中超过限制后禁用项目选择

转载 作者:行者123 更新时间:2023-11-29 15:07:07 25 4
gpt4 key购买 nike

我试图在超过限制后取消选择。在下面给出的代码中,当最大选择限制超过时,我能够实现 toast 。但是当我试图在超过限制时禁用或取消选择该项目时,它不是工作。

public class MultiSelectionSpinner1 extends Spinner implements
OnMultiChoiceClickListener {

public interface OnMultipleItemsSelectedListener{
void selectedIndices(List<Integer> indices);
void selectedStrings(List<String> strings);
}
private OnMultipleItemsSelectedListener listener;

String[] _items = null;
boolean[] mSelection = null;
boolean[] mSelectionAtStart = null;
String _itemsAtStart = null;

ArrayAdapter<String> simple_adapter;

public MultiSelectionSpinner1(Context context) {
super(context);
simple_adapter = new ArrayAdapter<>(context,
android.R.layout.simple_spinner_item);
super.setAdapter(simple_adapter);
}

public MultiSelectionSpinner1(Context context, AttributeSet attrs) {
super(context, attrs);

simple_adapter = new ArrayAdapter<>(context,
android.R.layout.simple_spinner_item);
super.setAdapter(simple_adapter);
}

public void setListener(OnMultipleItemsSelectedListener listener){
this.listener = listener;
}

public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (mSelection != null && which < mSelection.length) {
Log.e("_items.length", "_items.length" + _items.length);
Log.e("_itemsAtStart", "_itemsAtStart" + _itemsAtStart);


// listener.selectedStrings(getSelectedStrings());
if(getSelectedIndices().size()<3){
mSelection[which] = isChecked;
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}else
{
Toast.makeText(getContext(),"Exceeds",Toast.LENGTH_SHORT).show();
setDiselection(which);

}
//listener.selectedIndices(getSelectedIndices());
} else {
throw new IllegalArgumentException(
"Argument 'which' is out of bounds.");
}
}


@Override
public boolean performClick() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Please select!!!");
builder.setMultiChoiceItems(_items, mSelection, this);
_itemsAtStart = getSelectedItemsAsString();
builder.setPositiveButton("Submit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.arraycopy(mSelection, 0, mSelectionAtStart, 0, mSelection.length);
listener.selectedIndices(getSelectedIndices());
listener.selectedStrings(getSelectedStrings());
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
simple_adapter.clear();
simple_adapter.add(_itemsAtStart);
System.arraycopy(mSelectionAtStart, 0, mSelection, 0, mSelectionAtStart.length);
}
});
builder.show();
return true;
}

@Override
public void setAdapter(SpinnerAdapter adapter) {
throw new RuntimeException(
"setAdapter is not supported by MultiSelectSpinner.");
}

public void setItems(String[] items) {
_items = items;
mSelection = new boolean[_items.length];
mSelectionAtStart = new boolean[_items.length];
simple_adapter.clear();
simple_adapter.add(_items[0]);
Arrays.fill(mSelection, false);
mSelection[0] = true;
mSelectionAtStart[0] = true;
}

public void setItems(List<String> items) {
_items = items.toArray(new String[items.size()]);
mSelection = new boolean[_items.length];
mSelectionAtStart = new boolean[_items.length];
simple_adapter.clear();
simple_adapter.add(_items[0]);
Arrays.fill(mSelection, false);
mSelection[0] = true;
}

public void setSelection(String[] selection) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
mSelectionAtStart[i] = false;
}
for (String cell : selection) {
for (int j = 0; j < _items.length; ++j) {
if (_items[j].equals(cell)) {
mSelection[j] = true;
mSelectionAtStart[j] = true;
}
}
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}

public void setSelection(List<String> selection) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
mSelectionAtStart[i] = false;
}
for (String sel : selection) {
for (int j = 0; j < _items.length; ++j) {
if (_items[j].equals(sel)) {
mSelection[j] = true;
mSelectionAtStart[j] = true;
}
}
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}

public void setSelection(int index) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
mSelectionAtStart[i] = false;
}
if (index >= 0 && index < mSelection.length) {
mSelection[index] = true;
mSelectionAtStart[index] = true;
} else {
throw new IllegalArgumentException("Index " + index
+ " is out of bounds.");
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}

public void setDiselection(int index) {

if (index >= 0 && index < mSelection.length) {
mSelection[index] = false;
mSelectionAtStart[index] = false;

} else {
throw new IllegalArgumentException("Index " + index
+ " is out of bounds.");
}
simple_adapter.clear();
simple_adapter.notifyDataSetChanged();
simple_adapter.add(buildSelectedItemString());
}

public void setSelection(int[] selectedIndices) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
mSelectionAtStart[i] = false;
}
for (int index : selectedIndices) {
if (index >= 0 && index < mSelection.length) {
mSelection[index] = true;
mSelectionAtStart[index] = true;
} else {
throw new IllegalArgumentException("Index " + index
+ " is out of bounds.");
}
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}

public List<String> getSelectedStrings() {
List<String> selection = new LinkedList<>();
for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
selection.add(_items[i]);
}
}
return selection;
}

public List<Integer> getSelectedIndices() {
List<Integer> selection = new LinkedList<>();
for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
selection.add(i);
}
}
return selection;
}

private String buildSelectedItemString() {
StringBuilder sb = new StringBuilder();
boolean foundOne = false;

for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
if (foundOne) {
sb.append(", ");
}
foundOne = true;

sb.append(_items[i]);
}
}
return sb.toString();
}

public String getSelectedItemsAsString() {
StringBuilder sb = new StringBuilder();
boolean foundOne = false;

for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
if (foundOne) {
sb.append(", ");
}
foundOne = true;
sb.append(_items[i]);
}
}
return sb.toString();
}
}

最佳答案

试试这个。我修改了您的 public void setDeselection(int index) 和 public boolean performClick() 方法。

public class MultiSelectSpinner1 extends Spinner implements
DialogInterface.OnMultiChoiceClickListener {

private static final String TAG = MultiSelectSpinner1.class.getSimpleName();
String[] _items = null;
boolean[] mSelection = null;
boolean[] mSelectionAtStart = null;
String _itemsAtStart = null;

ArrayAdapter<String> simple_adapter;
private OnMultipleItemsSelectedListener listener;

AlertDialog alertDialog;

public MultiSelectSpinner1(Context context) {
super(context);
simple_adapter = new ArrayAdapter<>(context,
android.R.layout.simple_spinner_item);
super.setAdapter(simple_adapter);
}

public MultiSelectSpinner1(Context context, AttributeSet attrs) {
super(context, attrs);

simple_adapter = new ArrayAdapter<>(context,
android.R.layout.simple_spinner_item);
super.setAdapter(simple_adapter);
}

public void setListener(OnMultipleItemsSelectedListener listener)
{
this.listener = listener;
}

public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (mSelection != null && which < mSelection.length) {
Log.e("_items.length", "_items.length" + _items.length);
Log.e("_itemsAtStart", "_itemsAtStart" + _itemsAtStart);


if (getSelectedIndices().size() < 3) {
mSelection[which] = isChecked;
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
} else {
Toast.makeText(getContext(),"Exceeds",Toast.LENGTH_SHORT).show();
setDeselection(which);

}
} else {
throw new IllegalArgumentException(
"Argument 'which' is out of bounds.");
}
}

@Override
public boolean performClick() {
buildDialogue();
return true;
}

private void buildDialogue() {
if(alertDialog!=null&&alertDialog.isShowing())
alertDialog.dismiss();

AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Please select!!!");
builder.setMultiChoiceItems(_items, mSelection, this);
_itemsAtStart = getSelectedItemsAsString();
builder.setPositiveButton("Submit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.arraycopy(mSelection, 0, mSelectionAtStart, 0, mSelection.length);
if (listener != null) {
listener.selectedIndices(getSelectedIndices());
listener.selectedStrings(getSelectedStrings());
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
simple_adapter.clear();
simple_adapter.add(_itemsAtStart);
System.arraycopy(mSelectionAtStart, 0, mSelection, 0, mSelectionAtStart.length);
}
});
alertDialog = builder.create();
alertDialog.show();
}

@Override
public void setAdapter(SpinnerAdapter adapter) {
throw new RuntimeException(
"setAdapter is not supported by MultiSelectSpinner.");
}

public void setItems(String[] items) {
_items = items;
mSelection = new boolean[_items.length];
mSelectionAtStart = new boolean[_items.length];
simple_adapter.clear();
simple_adapter.add(_items[0]);
Arrays.fill(mSelection, false);
mSelection[0] = true;
mSelectionAtStart[0] = true;
}

public void setItems(List<String> items) {
_items = items.toArray(new String[items.size()]);
mSelection = new boolean[_items.length];
mSelectionAtStart = new boolean[_items.length];
simple_adapter.clear();
simple_adapter.add(_items[0]);
Arrays.fill(mSelection, false);
mSelection[0] = true;
}

public void setSelection(String[] selection) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
mSelectionAtStart[i] = false;
}
for (String cell : selection) {
for (int j = 0; j < _items.length; ++j) {
if (_items[j].equals(cell)) {
mSelection[j] = true;
mSelectionAtStart[j] = true;
}
}
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}

public void setSelection(List<String> selection) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
mSelectionAtStart[i] = false;
}
for (String sel : selection) {
for (int j = 0; j < _items.length; ++j) {
if (_items[j].equals(sel)) {
mSelection[j] = true;
mSelectionAtStart[j] = true;
}
}
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}

public void setSelection(int index) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
mSelectionAtStart[i] = false;
}
if (index >= 0 && index < mSelection.length) {
mSelection[index] = true;
mSelectionAtStart[index] = true;
} else {
throw new IllegalArgumentException("Index " + index
+ " is out of bounds.");
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}

public void setDeselection(int index) {
Log.d(TAG, "setDeselection() called with: " + "index = [" + index + "]");

if (index >= 0 && index < mSelection.length) {
mSelection[index] = false;
mSelectionAtStart[index] = false;

} else {
throw new IllegalArgumentException("Index " + index
+ " is out of bounds.");
}
simple_adapter.clear();
simple_adapter.notifyDataSetChanged();
simple_adapter.add(buildSelectedItemString());

buildDialogue();
}

public void setSelection(int[] selectedIndices) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
mSelectionAtStart[i] = false;
}
for (int index : selectedIndices) {
if (index >= 0 && index < mSelection.length) {
mSelection[index] = true;
mSelectionAtStart[index] = true;
} else {
throw new IllegalArgumentException("Index " + index
+ " is out of bounds.");
}
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}

public List<String> getSelectedStrings() {
List<String> selection = new LinkedList<>();
for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
selection.add(_items[i]);
}
}
return selection;
}

public List<Integer> getSelectedIndices() {
List<Integer> selection = new LinkedList<>();
for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
selection.add(i);
}
}
return selection;
}

private String buildSelectedItemString() {
StringBuilder sb = new StringBuilder();
boolean foundOne = false;

for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
if (foundOne) {
sb.append(", ");
}
foundOne = true;

sb.append(_items[i]);
}
}
return sb.toString();
}

public String getSelectedItemsAsString() {
StringBuilder sb = new StringBuilder();
boolean foundOne = false;

for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
if (foundOne) {
sb.append(", ");
}
foundOne = true;
sb.append(_items[i]);
}
}
return sb.toString();
}

public interface OnMultipleItemsSelectedListener {
void selectedIndices(List<Integer> indices);

void selectedStrings(List<String> strings);
}
}

关于android - 如何在 MultiSelection Spinner Android 中超过限制后禁用项目选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com