Android 如何为多选微调器设置自定义适配器?
我有疑问,我找不到任何解决方案,我需要从sqlite记录中为multi-select spinner设置spinner的值,但到目前为止,我没有看到任何示例。我发现的是此适配器:Android 如何为多选微调器设置自定义适配器?,android,spinner,Android,Spinner,我有疑问,我找不到任何解决方案,我需要从sqlite记录中为multi-select spinner设置spinner的值,但到目前为止,我没有看到任何示例。我发现的是此适配器: public class MultiSelectionSpinner extends Spinner implements DialogInterface.OnMultiChoiceClickListener { String[] _items = null; boolean[] mSe
public class MultiSelectionSpinner extends Spinner implements
DialogInterface.OnMultiChoiceClickListener
{
String[] _items = null;
boolean[] mSelection = null;
ArrayAdapter<String> simple_adapter;
public MultiSelectionSpinner(Context context)
{
super(context);
simple_adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_spinner_item);
super.setAdapter(simple_adapter);
}
public MultiSelectionSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
simple_adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_spinner_item);
super.setAdapter(simple_adapter);
}
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (mSelection != null && which < mSelection.length) {
mSelection[which] = isChecked;
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
} else {
throw new IllegalArgumentException(
"Argument 'which' is out of bounds.");
}
}
@Override
public boolean performClick() {
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setMultiChoiceItems(_items, mSelection, this);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1)
{
}
});
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];
simple_adapter.clear();
simple_adapter.add(_items[0]);
Arrays.fill(mSelection, false);
}
public void setItems(List<String> items) {
_items = items.toArray(new String[items.size()]);
mSelection = new boolean[_items.length];
simple_adapter.clear();
simple_adapter.add(_items[0]);
Arrays.fill(mSelection, false);
}
public void setSelection(String[] selection) {
for (String cell : selection) {
for (int j = 0; j < _items.length; ++j) {
if (_items[j].equals(cell)) {
mSelection[j] = true;
}
}
}
}
public void setSelection(List<String> selection) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
}
for (String sel : selection) {
for (int j = 0; j < _items.length; ++j) {
if (_items[j].equals(sel)) {
mSelection[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;
}
if (index >= 0 && index < mSelection.length) {
mSelection[index] = true;
} else {
throw new IllegalArgumentException("Index " + index
+ " is out of bounds.");
}
simple_adapter.clear();
simple_adapter.add(buildSelectedItemString());
}
public void setSelection(int[] selectedIndicies) {
for (int i = 0; i < mSelection.length; i++) {
mSelection[i] = false;
}
for (int index : selectedIndicies) {
if (index >= 0 && index < mSelection.length) {
mSelection[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<String>();
for (int i = 0; i < _items.length; ++i) {
if (mSelection[i]) {
selection.add(_items[i]);
}
}
return selection;
}
public List<Integer> getSelectedIndicies() {
List<Integer> selection = new LinkedList<Integer>();
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();
}
}
公共类MultiSelectionSpinner扩展微调器实现
DialogInterface.OnMultiChoiceClickListener
{
字符串[]_items=null;
布尔[]mSelection=null;
阵列适配器简单_适配器;
公共MultiSelectionSpinner(上下文)
{
超级(上下文);
简单_适配器=新的阵列适配器(上下文,
android.R.layout.simple\u微调器(项目);
super.setAdapter(简单_适配器);
}
公共MultiSelectionSpinner(上下文、属性集属性){
超级(上下文,attrs);
简单_适配器=新的阵列适配器(上下文,
android.R.layout.simple\u微调器(项目);
super.setAdapter(简单_适配器);
}
public void onClick(DialogInterface dialog,int,其中布尔值被选中){
if(mSelection!=null&&which=0&&index=0&&index
在这个模型中,我无法将我的自定义对象列表设置为spinner,它是从sqlite填充的。我如何能让任何人共享任何解决方案请让我知道我正在努力解决这个问题 根据您的请求,查找以下(可能是)工作代码: 假设您有一个从db加载数据作为arra的方法
String items[] = myDbHelper.getSpinnerItems();
multiSpinner.setItems(items);