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);
如需进一步帮助,请发表评论并尽快获得回复