Dapatkan teks item yang dipilih pemintal?

370

Bagaimana cara mendapatkan teks item yang dipilih pemintal?

Saya harus mendapatkan teks pada item yang dipilih di pemintal saya ketika saya mengklik tombol simpan. saya perlu teks bukan Indeks.

Harinder
sumber

Jawaban:

772
Spinner spinner = (Spinner)findViewById(R.id.spinner);
String text = spinner.getSelectedItem().toString();
Farhan
sumber
telah memposting pertanyaan saya di sini stackoverflow.com/questions/5818850/…
Harsha MV
Saya menggunakan kode dan hasilnya bukan yang saya butuhkan pada mode debug saya menemukan itu memberi saya nilai seperti {supliers = VITA}. tapi aku hanya butuh nilai "VITA" ide?
Pedro Teran
Wow! Itu solusi mudah! Bagus!
pumpkee
Saya mencoba ini, tetapi saya tidak mendapatkan teks yang sebenarnya. Saya mendapat string yang mewakili objek kursor: android.database.sqlite.SQLiteCursor@410dfae8mungkin karena saya menggunakan adaptor kursor. Adakah yang harus saya lakukan untuk mendapatkan string yang tepat?
AdamMc331
ya, nilai yang dikembalikan tergantung pada jenis adaptor. Adaptor Anda harus dari basis kursor sehingga akan mengembalikan kursor. coba ketikkan kursor ke kursor lalu ambil nilai Anda dari kursor.
Farhan
38
TextView textView = (TextView)mySpinner.getSelectedView();
String result = textView.getText().toString();
Kartu as
sumber
6
Anda harus selalu menyertakan penjelasan tentang solusi yang Anda usulkan - stackoverflow.com/questions/how-to-answer
Michal
34

Anda harus menggunakan indeks dan Adaptor untuk mengetahui teks yang Anda miliki

Lihat contoh Spinner ini

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
sumber
4
Anda juga perluspinner.setOnItemSelectedListener(this);
whiteLT
14

Gunakan ini

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>

sumber
13

Spinner mengembalikan Anda nilai integer untuk array. Anda harus mengambil nilai string berdasarkan indeks.

Spinner MySpinner = (Spinner)findViewById(R.id.spinner);
Integer indexValue = MySpinner.getSelectedItemPosition();
Shaista Naaz
sumber
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
sumber
9

Versi satu baris:

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

UPDATE: Anda dapat menghapus casting jika Anda menggunakan SDK 26 (atau yang lebih baru) untuk mengkompilasi proyek Anda.

String text = findViewById(R.id.spinner).getSelectedItem().toString();
Miroslav Hrivik
sumber
7
TextView textView = (TextView) spinActSubTask.getSelectedView().findViewById(R.id.tvProduct);

String subItem = textView.getText().toString();
pengguna2294100
sumber
7

Setelah mengatur adaptor pemintal, kode ini akan membantu

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
sumber
3

Untuk pemintal berdasarkan pada CursorAdapter:

  • dapatkan id item yang dipilih: spinner.getSelectedItemId()
  • ambil nama item dari database Anda, misalnya:

    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
sumber
1

Bagi mereka yang memiliki pemintal berbasis HashMap :

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

Jika Anda berada dalam Fragmen, Adaptor atau Kelas selain aktivitas utama, gunakan ini:

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

Itu hanya untuk panduan; Anda harus menemukan id tampilan Anda sebelum metode onClick.

Arash
sumber
1

Itu juga bisa dicapai dengan cara yang sedikit lebih aman menggunakan String.valueOf()seperti itu

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

tanpa menabrak aplikasi ketika semua kacau. Alasan di balik keamanannya adalah memiliki kemampuan berurusan dengan nullobjek sebagai argumen. Dokumentasi mengatakan

jika argumennya adalah null, maka string sama dengan "null"; jika tidak, nilai obj.toString()dikembalikan.

Jadi, beberapa asuransi di sana jika ada yang kosong Spinner misalnya, item yang saat ini dipilih harus dikonversi String.

Siswa
sumber
0
Spinner spinner = (Spinner) findViewById(R.id.yourspinnerid);
String text = spinner.getSelectedItem().toString();
Fahad Jadun
sumber
Ini mungkin bisa menyelesaikan masalah, tetapi tolong berikan penjelasan. Banyak pengguna baru yang datang ke SO dan penjelasan dengan kode Anda membantu mereka mempelajari cara mengadaptasi kode untuk menyelesaikan masalah mereka.
JenB