Rainmaker
Rainmaker

Reputation: 11100

Android. OnItemSelectedListener doesn't work when spinner item selected

I have a Fragment where I dynamically create spinners. When I select item from spinner the onItemSelected doesn't trigger. Can I use AdapterView.OnItemSelectedListener interface in my approach? What am I doing wrong? Is there a best practices of handling item selection?

Here is the code:

public class ArticleAddParamsFragment extends Fragment implements AdapterView.OnItemSelectedListener {

    private LinearLayout addPrLayout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_article_addparams, container, false);
        addPrLayout = (LinearLayout) rootView.findViewById(R.id.addparams_layout);
        setUpSpinners(getArguments().getLong("idArt"));
        return rootView;
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // doesn't go here
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // doesn't go here

    }

    private void setUpSpinners(long idArt){
        RealmAddParam addParForArt = realm.where(RealmAddParam.class)
                .findAll()
                .where()
                .equalTo("idTaskart", idArt)
                .findFirst();
        for (RealmAddPrmMain prm: addParForArt.getAddParams()) {
            addPrLayout.addView(createSpinner(prm));
        }
    }

    public Spinner createSpinner(RealmAddPrmMain adPrm) {
        Spinner spinner = new Spinner(getActivity());
        spinner.setPrompt(adPrm.getNameAdd());
        spinner.setFocusableInTouchMode(true);
        spinner.setFocusable(true);
        final ArrayList<SpinnerAdPrObj> spObjects = new ArrayList<>();
        if (adPrm.getVvalue() != null) {
            String[] values = adPrm.getVvalue().replace("[","").replace("]","").split(",");
            if (values.length > 1){
                for (Integer i = 0; i < values.length; i++){;
                    if (values[i].split(":::").length > 1) {
                        spObjects.add(new SpinnerAdPrObj(values[i].split(":::")[0], values[i].split(":::")[2], values[i].split(":::")[1]));
                    } else {
                        spObjects.add(new SpinnerAdPrObj(values[i].split(":::")[0]));
                    }
                }
            }
        }
        ArrayAdapter<SpinnerAdPrObj> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, spObjects);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        return spinner;
    }

}

SOLUTION WAS: just to add spinner.setOnItemSelectedListener(this);

Upvotes: 0

Views: 1155

Answers (1)

Ashish P
Ashish P

Reputation: 3056

  spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });

Upvotes: 1

Related Questions