Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在一行中多次选择微调器下拉菜单项_Android - Fatal编程技术网

Android 无法在一行中多次选择微调器下拉菜单项

Android 无法在一行中多次选择微调器下拉菜单项,android,Android,我的问题是,我可以在微调器下拉菜单中选择一个列表项,但如果不先选择另一个项,我就无法在一行中多次选择一个项。必须有一种方法来更改父类中的选择参数。知道怎么做吗 我的微调器下拉菜单中有一些项目 dropdownMenu = (Spinner) findViewById(R.id.dropdownMenu); List<String> list = new ArrayList<>(); list.add("Filters"); list.add("list 2"); li

我的问题是,我可以在微调器下拉菜单中选择一个列表项,但如果不先选择另一个项,我就无法在一行中多次选择一个项。必须有一种方法来更改父类中的选择参数。知道怎么做吗

我的微调器下拉菜单中有一些项目

dropdownMenu = (Spinner) findViewById(R.id.dropdownMenu);

List<String> list = new ArrayList<>();

list.add("Filters");
list.add("list 2");
list.add("list 3");

ArrayAdapter<String> dataAdapter = new ArrayAdapter<>(this,
        android.R.layout.simple_spinner_item, list);

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

dropdownMenu.setAdapter(dataAdapter);
以下是在
MainActivity

dropdownMenu.setOnItemSelectedListener(this);
public void onItemSelected(AdapterView<?> parent, View view,
                           int pos, long id) {
    // An item was selected. You can retrieve the selected item using
    // parent.getItemAtPosition(pos)
    Log.v(TAG,"SELECTED");

    // There must be a way to change the selected 
    // property to false here
}

public void onNothingSelected(AdapterView<?> parent) {
    // Another interface callback
}
public void未选中(AdapterView父视图、视图、,
内部位置,长id){
//已选择一个项目。您可以使用
//父项getItemAtPosition(pos)
Log.v(标记“选定”);
//必须有一种方法来更改所选的
//属性在此处设置为false
}
未选择公共无效(AdapterView父级){
//另一个接口回调
}

您需要实现如下自定义微调器:

public class CustomSpinner extends Spinner {

    public CustomSpinner(Context context) {
        super(context);
    }

    public CustomSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomSpinner(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setSelection(int position, boolean animate) {
        boolean sameSelected = position == getSelectedItemPosition();
        super.setSelection(position, animate);
        if (sameSelected) {
            // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now
            getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());
        }

    }

    @Override
    public void setSelection(int position) {
        boolean sameSelected = position == getSelectedItemPosition();
        super.setSelection(position);
        if (sameSelected) {
            // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now
            getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());
        }
    }
}

所有帖子都给出了一半答案,因此发布了完整的实现,以便于初学者更好地理解

创建一个自定义微调器类,如下所示

import android.content.Context;
import android.util.AttributeSet;

import androidx.appcompat.widget.AppCompatSpinner;

/** Spinner extension that calls onItemSelected even when the selection is the same as its previous value */
public class NDSpinner extends AppCompatSpinner {

public NDSpinner(Context context)
{ super(context); }

public NDSpinner(Context context, AttributeSet attrs)
{ super(context, attrs); }

public NDSpinner(Context context, AttributeSet attrs, int defStyle)
{ super(context, attrs, defStyle); }

@Override public void
setSelection(int position, boolean animate)
{
    boolean sameSelected = position == getSelectedItemPosition();
    super.setSelection(position, animate);
    if (sameSelected) {
        // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now
        getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());
    }
}

@Override public void
setSelection(int position)
{
    boolean sameSelected = position == getSelectedItemPosition();
    super.setSelection(position);
    if (sameSelected) {
        // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now
        getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());
    }
}
}
现在在xml文件中,创建一个微调器。将微调器标记替换为
,例如

在java文件中,定义微调器变量,如下所示: 例如:-

NDSpinner ndSpinner = findViewById(R.id.spinnerId);
如需进一步帮助,请发表评论并尽快获得回复