1

My question is like this SO question (and other, similar questions), but none of the proposed solutions are working for me. All these...

String selectedShelf = spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString();
String selectedShelf = spinner.getSelectedItem().toString();
String selectedShelf = spinner.getItemAtPosition(position).toString();
String selectedShelf = parentView.getItemAtPosition(position).toString();

...result in the content of selectedShelf being "android.content.ContentResolver$CursorWrapperInner@43bb89b0".

How can I retrieve the value of the selected string?

Here is my code:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View fragmentView =  inflater.inflate(R.layout.fragment_browse_spinner, container, false);

    Spinner spinner = (Spinner)fragmentView.findViewById(R.id.browseSpinner);
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            if (id != -1L) {
                String selectedShelf = ...;
                Log.d(LOG_TAG, "selectedShelf: " + selectedShelf);              
            }
        }

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

    });

    adapter = new SimpleCursorAdapter(getActivity(),
            android.R.layout.simple_spinner_item, // This is the layout that will be used for the standard/static part of the spinner. (You can use android.R.layout.simple_list_item_2 if you want two lines to be shown here.)
            null,
            new String[] {DbContentProvider.KEY_SHELF_NAME, DbContentProvider.KEY_EXTRA_SHELF_INFO},
            new int[]{android.R.id.text1, android.R.id.text2},
            0
    );

    // This sets the layout that will be used when the dropdown views are shown. I'm using android.R.layout.simple_list_item_2 so the subtext will also be shown.
    adapter.setDropDownViewResource(android.R.layout.simple_list_item_2);

    spinner.setAdapter(new NothingSelectedSpinnerAdapter(
            adapter,
            R.layout.browse_spinner_row_nothing_selected,
            getActivity()));

    getLoaderManager().initLoader(0, null, this);

    return fragmentView;
}
Community
  • 1
  • 1
ban-geoengineering
  • 18,324
  • 27
  • 171
  • 253

1 Answers1

1

I have worked out the solution:

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {

            TextView selectedShelfTextView = (TextView)selectedItemView.findViewById(android.R.id.text1); // You may need to replace android.R.id.text1 whatever your TextView label id is
            String selectedShelf = selectedShelfTextView.getText().toString();
ban-geoengineering
  • 18,324
  • 27
  • 171
  • 253