如何在spinner.setOnItemSelectedListener(..)中填充微调器



当标题显示我的查询时,我只想在用户单击微调器时填充它,即微调器最初为空,当用户单击它时,所有项目都显示出来。我尝试了以下代码:

if (spin1 != null) {
spin1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
ArrayList<String> arr=new ArrayList<String>();
arr.add("Hello");
arr.add("Hey");
arr.add("Yo");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(view.getContext(), android.R.layout.simple_spinner_item,arr);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
assert spin1 != null;
spin1.setAdapter(adapter);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {}
});
}

但是我上面的代码不起作用。当我点击它时,旋转器是空的。你能告诉我为什么以及如何解决这个问题吗?

您可以注册TouchListener,以便在第一次单击时为Spinner设置Adapter,如以下代码片段所示:

// array list to populate the spinner's item
List < String > array = new ArrayList < > ();
array.add("Nepal");
array.add("India");
array.add("China");
// create adapter instance from the array list
ArrayAdapter < String > adapter = new ArrayAdapter < > (requireContext(),
android.R.layout.simple_spinner_item, array);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// register on item selected listener as usual
binding.testSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView << ? > parent, View view, int position, long id) {
Toast.makeText(requireContext(), array.get(position), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView << ? > parent) {}
});
// set on touch listener as we cant set onclick listener in spinner
// because it is made to throw exception
binding.testSpinner.setOnTouchListener((v, event) - > {
// set the adapter in the touch event
// ACTION_UP occurs when user releases the finger
if (event.getAction() == MotionEvent.ACTION_UP) {
binding.testSpinner.setAdapter(adapter);
}
// return false as we dont want to consume the event
// but want to allow it to propagate in the parent view hierarchy
return false;
});

最新更新