Trying to inject a spinner in my application. There are three items in the list, and for some incomprehensible reason, only the choice of 2.3 is perceived if I start from 1. This is my previous question on this topic - How can I sort the list in Android? . Here's what I got at the moment:

 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { switch (position) { case 0: messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter); break; case 1: DateSort_theme ds = new DateSort_theme(); try { messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter); Collections.sort(messageArrayList, ds); } catch (Exception ignored) { } break; case 2: DateSort_sender ds2 = new DateSort_sender(); try { messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter); Collections.sort(messageArrayList, ds2); } catch (Exception ignored) { } break; } 

everything seems to be the same for all items, but for some reason only 2.3 is chosen. And I want to make sure that the default is 1 point and then continue to look if 1,2,3 is selected then do something. I tried to insert another additional default in the switch block, but it also does not select by default and it is not at all obvious that it works. Probably I have a mistake somewhere, but I can’t understand where exactly.

UPDATE

 mSwipeRefreshLayout.setRefreshing(true); if (response.isSuccessful()) { Integer count = Objects.requireNonNull(response.body()).getCount(); if (count > 0) { recyclerView.setVisibility(View.VISIBLE); spinner.setVisibility(View.VISIBLE); /* messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter);*/ spinner.setSelection(0); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { switch (position) { case 0: messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter); break; case 1: DateSort_theme ds = new DateSort_theme(); try { messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter); Collections.sort(messageArrayList, ds); } catch (Exception ignored) { } break; case 2: DateSort_sender ds2 = new DateSort_sender(); try { messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter); Collections.sort(messageArrayList, ds2); } catch (Exception ignored) { } break; default: messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter); break; } } @Override public void onNothingSelected(AdapterView<?> adapterView) { spinner.setSelection(2); messageArrayList = (ArrayList<Message>) Objects.requireNonNull(response.body()).getMessages(); adapter = new ListAdapter(messageArrayList, getActivity(), type); recyclerView.setAdapter(adapter); mSwipeRefreshLayout.setRefreshing(false); } }); } else if (count == 0) { recyclerView.setVisibility(View.GONE); spinner.setVisibility(View.GONE); ivPicture = Objects.requireNonNull(getActivity()).findViewById(R.id.ivNoMess); ivPicture.setVisibility(View.VISIBLE); } 
  • Completed the answer. - McDaggen
  • Where do you call spinner.setOnItemSelectedListener is onCreate? You must set spinner.setSelection (0) in the onCreate method; as soon as a window is created, the spinner should apply the selected item, in this case the first one - McDaggen
  • No, this is not in onCreate (), this is the function that is used to send the request, and already in this function, depending on the results from the server, data is being processed. - Andrew Goroshko

1 answer 1

 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // Тут вешаешь Switch } @Override public void onNothingSelected(AdapterView<?> parent) { // Тут выполняешь код, если ничего не выбрано, например код первого кейса } }); 

In general, the Switch should work for you, since the default position is 0, then the question arises where do you set the listener on the spinner? The listener must be installed in onCreate

  • I have a listener in the function that receives data from the server, if the server has not sent anything, then the listener does not work :( - Andrew Goroshko
  • Well, then how should the code from Spinner work if the listener is not implemented initially? You install the listener in onCreate spinner.setOnItemSelectedListener (this); and install methods in Swtich, the first one by default, and the rest only work if there is an answer from the server - McDaggen
  • so the first one can also work only if there is an answer from the server, without a response it is meaningless - Andrew Goroshko
  • anyway it does not work out what is needed, what should I add to the question so that it would be easier for you to help me? - Andrew Goroshko
  • Where you do a check on the response from the server, set a condition if the answer is not empty spinner.setSelection (0); this way you will call the first item from the list. - McDaggen