【问题标题】:How to get the value of a selected item in a spinner?如何获取微调器中选定项目的值?
【发布时间】:2015-02-19 17:43:52
【问题描述】:

我刚学Android应用开发,不明白怎么Logspinner中选中项的值。

这是我为MainActivity.java 准备的内容

import android.content.ContentResolver;
import android.database.Cursor;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.provider.ContactsContract;

import java.util.ArrayList;

    public class MainActivity extends ActionBarActivity {
        public Spinner contactSpinner = (Spinner) findViewById(R.id.contact_list);

    protected void onCreate(Bundle savedInstanceState) {
        ArrayList contactList = new ArrayList();

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contactList.add("An item");  
        contactList.add("Another item");  
        contactList.add("A third item");  

        // Add items from contactList to spinner
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,contactList);
        contactSpinner.setAdapter(adapter);
    }

    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        parent.getItemAtPosition(pos);

    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }

    contactSpinner.setOnItemSelectedListener(this);  
}

我正在关注responding to user selections 上的 Android 开发文档,但使用我的代码时,我收到此错误:Could not resolve symbol setOnItemSelectedListener

为什么?我该如何解决它,以便我可以 Log 在 Spinner 中选择什么?

编辑

此代码有效

package com.example.compy.spookr;

公共类 MainActivity 扩展 ActionBarActivity 实现 AdapterView.OnItemSelectedListener { 公共微调器contactSpinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ArrayList contactList = new ArrayList();
    contactSpinner = (Spinner) findViewById(R.id.contact_list);
    contactSpinner.setOnItemSelectedListener(this);
    // Rest of code...
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    // An item was selected. You can retrieve the selected item using
    parent.getItemAtPosition(pos);
    Log.v("onItemSelected",(String) parent.getItemAtPosition(pos));
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
    // Another interface callback
}

// Rest of code ... 

}

【问题讨论】:

  • 您正试图在代码块之外执行代码。您需要将contactSpinner.setOnItemSelectedListener(this); 移动到您的一种方法中。

标签: java android xml spinner android-spinner


【解决方案1】:

首先,你需要实现interface你想要使用的方法。在你的情况下,你可以这样做:

public class MainActivity extends ActionBarActivity implements OnItemSelectedListener{

然后,将@Override 放在描述您想要的行为的方法上:

  @Override
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
// An item was selected. You can retrieve the selected item using
parent.getItemAtPosition(pos);

}

   @Override
  public void onNothingSelected(AdapterView<?> parent) {
// Another interface callback

}

然后在 onCreate() 中设置您的微调器侦听器:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactSpinner = (Spinner) findViewById(R.id.contact_list);
contactSpinner.setOnItemSelectedListener(this);  
....

【讨论】:

    【解决方案2】:

    我收到此错误:无法解析符号 setOnItemSelectedListener

    MainActivity 中实现OnItemSelectedListener 接口:

    public class MainActivity extends ActionBarActivity 
                                  implements OnItemSelectedListener{
      ....
    }
    

    onCreate 方法中将 setOnItemSelectedListener 添加到 Spinner :

    public Spinner contactSpinner;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        contactSpinner = (Spinner) findViewById(R.id.contact_list);
        contactSpinner.setOnItemSelectedListener(this);  
         //... your code here..
    }
    

    并且在为当前 Activity 设置布局后还调用 findViewById,因为来自 xml 的视图仅在为 Activity 设置布局后可用,否则应用程序将因 NPE 而崩溃

    【讨论】:

      【解决方案3】:

      您可以使用 getSelectedItem() 方法:

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

      或使用 getItemAtPosition() 方法:

      public class SpinnerActivity extends Activity implements OnItemSelectedListener {
          ...
          @Override
          public void onItemSelected(AdapterView<?> parent, View view, 
                  int pos, long id) {
              // An item was selected. You can retrieve the selected item using
              // parent.getItemAtPosition(pos)
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-12
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-20
        相关资源
        最近更新 更多