Uzyskaj tekst wybranych elementów przędzarki?


370

Jak zdobyć tekst wybranego przedmiotu w przędzarce?

Po kliknięciu przycisku Zapisz muszę uzyskać tekst na elemencie wybranym w moim pokrętle. potrzebuję tekstu, a nie indeksu.

Odpowiedzi:


772
Spinner spinner = (Spinner)findViewById(R.id.spinner);
String text = spinner.getSelectedItem().toString();

zamieściłem tutaj moje pytanie stackoverflow.com/questions/5818850/...
Harsha MV

Użyłem kodu i wynik nie jest tym, czego potrzebuję w trybie debugowania. Znalazłem, że daje mi wartość taką jak {supliers = VITA}. ale potrzebuję tylko wartości „VITA” jakieś pomysły?
Pedro Teran

Łał! To proste rozwiązanie! Świetny!
pumpkee

Próbowałem tego, ale nie dostałem prawdziwego tekstu. Mam ciąg reprezentujący obiekt kursora: android.database.sqlite.SQLiteCursor@410dfae8prawdopodobnie dlatego, że użyłem adaptera kursora. Masz pomysł, co powinienem zrobić, aby uzyskać odpowiedni ciąg?
AdamMc331,

tak, zwracana wartość zależy od typu adaptera. Adapter musi być na bazie kursora, aby mógł zwrócić kursor. spróbuj rzutować go na kursor, a następnie pobierz wartość z kursora.
Farhan


34

Musisz użyć indeksu i adaptera, aby znaleźć tekst

Zobacz ten przykład Spinnera

public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
      Toast.makeText(parent.getContext()), "The planet is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}

4
Potrzebujesz takżespinner.setOnItemSelectedListener(this);
whiteLT

14

Użyj tego

import java.util.ArrayList;   
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class dynamic_spinner_main extends Activity {

    private Spinner m_myDynamicSpinner;
    private EditText m_addItemText;
    private ArrayAdapter<CharSequence> m_adapterForSpinner;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_spinner);

        ///////////////////////////////////////////////////////////////
        //grab our UI elements so we can manipulate them (in the case of the Spinner)
        //    or add listeners to them (in the case of the buttons)
        m_myDynamicSpinner = (Spinner)findViewById(R.id.dynamicSpinner);        
        m_addItemText = (EditText)findViewById(R.id.newSpinnerItemText);
        Button addButton = (Button)findViewById(R.id.AddBtn);
        Button clearButton = (Button)findViewById(R.id.ClearBtn);

        ////////////////////////////////////////////////////////////////
        //create an arrayAdapter an assign it to the spinner
        m_adapterForSpinner = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
        m_adapterForSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        
        m_myDynamicSpinner.setAdapter(m_adapterForSpinner);
        m_adapterForSpinner.add("gr");        
        m_myDynamicSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                // your code here
                Intent mIntent=new Intent(dynamic_spinner_main.this,sampleLocalization.class);
                mIntent.putExtra("lang", m_myDynamicSpinner.getItemIdAtPosition(position));
                System.out.println("Spinner value...."+m_myDynamicSpinner.getSelectedItem().toString());
                startActivity(mIntent);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }

        });
        ////////////////////////////////////////////////////////////////
        //add listener for addButton
        addButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {               
                addNewSpinnerItem();
            }                   
        });

        ////////////////////////////////////////////////////////////////
        //add listener for addButton
        clearButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                clearSpinnerItems();
            }           
        });  
    }

    private void addNewSpinnerItem() {
        CharSequence textHolder = "" + m_addItemText.getText();
        m_adapterForSpinner.add(textHolder);
    }

    private void clearSpinnerItems() {
        m_adapterForSpinner.clear();
        m_adapterForSpinner.add("dummy item");
    }       
}

main_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <EditText android:layout_height="wrap_content" 
            android:layout_margin="4px" 
            android:id="@+id/newSpinnerItemText" 
            android:layout_width="fill_parent"></EditText>
    <Button android:layout_height="wrap_content" 
            android:id="@+id/AddBtn" 
            android:layout_margin="4px" 
            android:layout_width="fill_parent" 
            android:text="Add To Spinner"></Button>
    <Button android:layout_height="wrap_content" 
            android:id="@+id/ClearBtn" 
            android:layout_margin="4px" 
            android:layout_width="fill_parent" 
            android:text="Clear Spinner Items"></Button>
    <Spinner android:layout_height="wrap_content" 
            android:id="@+id/dynamicSpinner" 
            android:layout_margin="4px" 
            android:layout_width="fill_parent"></Spinner>
</LinearLayout>

13

Spinner zwraca wartość całkowitą dla tablicy. Musisz pobrać wartość ciągu na podstawie indeksu.

Spinner MySpinner = (Spinner)findViewById(R.id.spinner);
Integer indexValue = MySpinner.getSelectedItemPosition();

10
spinner_button.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?>arg0, View view, int arg2, long arg3) {

            String selected_val=spinner_button.getSelectedItem().toString();

            Toast.makeText(getApplicationContext(), selected_val ,
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

}

9

Wersja jednoliniowa:

String text = ((Spinner)findViewById(R.id.spinner)).getSelectedItem().toString();

AKTUALIZACJA: Możesz usunąć przesyłanie, jeśli używasz zestawu SDK 26 (lub nowszego) do skompilowania projektu.

String text = findViewById(R.id.spinner).getSelectedItem().toString();

7
TextView textView = (TextView) spinActSubTask.getSelectedView().findViewById(R.id.tvProduct);

String subItem = textView.getText().toString();

7

Po ustawieniu adaptera przędzarki ten kod pomoże

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(getApplicationContext(), "This is " +
                    adapterView.getItemAtPosition(i).toString(), Toast.LENGTH_LONG).show();

            try {
                //Your task here
            }catch (Exception e)
            {
                e.printStackTrace();
            }
        }

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

        }
    });

3

W przypadku błystek opartych na CursorAdapter:

  • pobierz identyfikator wybranego elementu: spinner.getSelectedItemId()
  • pobierz nazwę elementu z bazy danych, na przykład:

    public String getCountryName(int pId){
        Cursor cur = mDb.query(TABLE, new String[]{COL_NAME}, COL_ID+"=?", new String[]{pId+""}, null, null, null);
        String ret = null;
        if(cur.moveToFirst()){
            ret = cur.getString(0);
        }
        cur.close();
        return ret;
    }

1

Dla tych mają spinner oparty na HashMap :

((HashMap)((Spinner)findViewById(R.id.YourSpinnerId)).getSelectedItem()).values().toArray()[0].toString();

Jeśli jesteś we fragmencie, adapterze lub klasie innej niż główne czynności, użyj tego:

((HashMap)((Spinner)YourInflatedLayoutOrView.findViewById(R.id.YourSpinnerId)).getSelectedItem()).values().toArray()[0].toString();

To jest tylko wskazówka; powinieneś znaleźć identyfikator swojego widoku przed metodą onClick.


1

Można to również osiągnąć w nieco bezpieczniejszy sposób, stosując String.valueOf()podobny sposób

Spinner sp = (Spinner) findViewById(R.id.sp_id);
String selectedText = String.valueOf(sp.getSelectedItem());

bez awarii aplikacji, gdy rozpęta się piekło. Powodem jego bezpieczeństwa jest możliwość radzenia sobie z nullobiektami jako argumentem. Dokumentacja mówi

jeśli argument jest null, to ciąg równy "null"; w przeciwnym razie zwracana obj.toString()jest wartość .

Tak więc niektóre ubezpieczenia tam na przykład w przypadku posiadania pustego Spinner , na który obecnie wybrany element należy przekonwertować String.


0
Spinner spinner = (Spinner) findViewById(R.id.yourspinnerid);
String text = spinner.getSelectedItem().toString();

Może to rozwiązać problem, ale proszę również podać wyjaśnienie. Wielu nowych użytkowników przychodzi do SO, a wyjaśnienia z Twoim kodem pomagają im nauczyć się dostosowywać kod do rozwiązania ich problemu.
JenB
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.