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.

Harinder
źródło

Odpowiedzi:

772
Spinner spinner = (Spinner)findViewById(R.id.spinner);
String text = spinner.getSelectedItem().toString();
Farhan
źródło
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
38
TextView textView = (TextView)mySpinner.getSelectedView();
String result = textView.getText().toString();
As
źródło
6
powinieneś zawsze zawierać wyjaśnienie proponowanego rozwiązania - stackoverflow.com/questions/how-to-answer
Michał
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.
    }
}
ccheneson
źródło
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>

źródło
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();
Shaista Naaz
źródło
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

        }
    });

}
Irfan Ali
źródło
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();
Miroslav Hrivik
źródło
7
TextView textView = (TextView) spinActSubTask.getSelectedView().findViewById(R.id.tvProduct);

String subItem = textView.getText().toString();
użytkownik2294100
źródło
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) {

        }
    });
Ahsan
źródło
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;
    }
Yar
źródło
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.

Wysypka
źródło
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.

Student
źródło
0
Spinner spinner = (Spinner) findViewById(R.id.yourspinnerid);
String text = spinner.getSelectedItem().toString();
Fahad Jadun
źródło
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