Nhận spinner chọn mục văn bản?


370

Làm thế nào để có được văn bản của mục được chọn spinner?

Tôi phải lấy văn bản trên mục được chọn trong spinner của mình khi tôi nhấp vào nút lưu. Tôi cần văn bản không phải là Index.

Câu trả lời:


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

đã đăng câu hỏi của tôi lên đây stackoverflow.com/questions/5818850/
Ấn

Tôi đã sử dụng mã và kết quả không phải là thứ tôi cần trên chế độ gỡ lỗi. Tôi thấy nó mang lại cho tôi một giá trị như {supliers = VITA}. Nhưng tôi chỉ cần giá trị "VITA" bất kỳ ý tưởng?
Pedro Teran

Ồ Đó là một giải pháp dễ dàng! Tuyệt quá!
pumpkee

Tôi đã thử điều này, nhưng tôi không nhận được văn bản thực tế. Tôi có một chuỗi đại diện cho một đối tượng con trỏ: android.database.sqlite.SQLiteCursor@410dfae8có thể vì tôi đã sử dụng bộ điều hợp con trỏ. Bất kỳ ý tưởng tôi nên làm gì để có được chuỗi đúng?
AdamMc331

có, giá trị trả về phụ thuộc vào loại bộ chuyển đổi. Bộ điều hợp của bạn phải là cơ sở con trỏ để nó sẽ trả về con trỏ. hãy thử đánh máy nó tới con trỏ và sau đó lấy giá trị của bạn từ con trỏ.
Farhan


34

Bạn phải sử dụng chỉ mục và Bộ điều hợp để tìm ra văn bản bạn có

Xem ví dụ này về Spinner

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
Ngoài ra bạn cầnspinner.setOnItemSelectedListener(this);
whiteLT

14

dùng cái này

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 trả về cho bạn giá trị nguyên cho mảng. Bạn phải lấy giá trị chuỗi dựa trên chỉ mục.

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

Phiên bản một dòng:

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

CẬP NHẬT: Bạn có thể xóa truyền nếu bạn sử dụng SDK 26 (hoặc mới hơn) để biên dịch dự án của bạn.

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

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

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

7

Sau khi thiết lập bộ điều hợp spinner, mã này sẽ giúp

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

Đối với các spinners dựa trên CthonAd CHƯƠNG:

  • lấy id mục đã chọn: spinner.getSelectedItemId()
  • lấy tên mục từ cơ sở dữ liệu của bạn, ví dụ:

    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

Đối với những người có spinner dựa trên HashMap :

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

Nếu bạn đang ở trong Fragment, Adaptor hoặc Class ngoài các hoạt động chính, hãy sử dụng điều này:

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

Nó chỉ để hướng dẫn; bạn nên tìm id của chế độ xem trước khi phương thức onClick.


1

Nó cũng có thể đạt được một cách an toàn hơn một chút bằng cách sử dụng String.valueOf()như vậy

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

mà không bị sập ứng dụng khi tất cả địa ngục vỡ ra. Lý do đằng sau sự an toàn của nó là có khả năng xử lý nullcác đối tượng làm đối số. Các tài liệu nói

nếu đối số là null, thì một chuỗi bằng "null"; mặt khác, giá trị của obj.toString()được trả lại.

Vì vậy, một số bảo hiểm ở đó trong trường hợp có một sản phẩm nào Spinner chẳng hạn, mà mặt hàng hiện được chọn phải được chuyển đổi thành String.


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

Điều này cũng có thể giải quyết vấn đề, nhưng xin vui lòng cung cấp một lời giải thích. Nhiều người dùng mới đến SO và giải thích với mã của bạn giúp họ tìm hiểu cách điều chỉnh mã để giải quyết vấn đề của họ.
JenB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.