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.

Jawaban:


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

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


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.
    }
}

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>

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();

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

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();

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

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

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) {

        }
    });

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;
    }

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.


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.


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.