安卓中的Spinner无法工作

4

旋转器不起作用。这是我的代码:

public class second extends Activity{   
    Spinner spin;
    String[] str;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);        
        spin = (Spinner) findViewById(R.id.spin);
        str = new String[] {"bike","car"};      
        spin.setAdapter(new ArrayAdapter<CharSequence>(this, android.R.layout.simple_dropdown_item_1line, str));    

        spin.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> adapter, View view, int pos,
                long id) {
            // TODO Auto-generated method stub

            String data= spin.getItemAtPosition(pos).toString();
            Toast.makeText(second.this, data, Toast.LENGTH_SHORT).show();
               }    
        });
    }
}

你能让我们看看你的logcat吗? - Kartik Domadiya
08-02 11:54:48.009: ERROR/AndroidRuntime(382): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.my.ex/com.my.ex.second}: java.lang.NullPointerException - SilentKiller
我只是通过toast来显示在spinner中选择的数据。 - SilentKiller
3
我认为你需要设置OnItemSelectedListener而不是OnItemClickListener。尝试更改一下,看看结果如何。参考链接:http://developer.android.com/resources/tutorials/views/hello-spinner.html - Kartik Domadiya
4个回答

6
你所犯的唯一错误就是设置了不同的事件监听器。 OnItemClickListener 监听器是针对 ListView 的。
而对于 Spinner,你需要设置 OnItemSelectedListener
尝试将 OnItemClickListener 替换为 setOnItemSelectedListener,像这样:
spin.setOnItemSelectedListener (new OnItemSelectedListener() {

    public void onItemClick(AdapterView<?> adapter, View view, int pos,
            long id) {
        // TODO Auto-generated method stub

        String data= spin.getItemAtPosition(pos).toString();
        Toast.makeText(second.this, data, Toast.LENGTH_SHORT).show();
    }

});

6
这样做是否有效?你正在设置一个具有OnItemSelectedListener和OnItemClickListener的集合? - atreat
2
我尝试了你发布的那段代码,但它会抛出编译器错误。我的理解是,你需要使用spin.OnItemSelectedListener(new OnItemSelectedListener() ... 并且OnItemSelectedListeners没有你提到的回调函数。它们只有OnItemSelected()和OnNothingSelected()。 http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html - atreat
@Kartik,它会抛出编译错误,因为你使用了OnItemClickListener而不是OnItemSelectedListener。不知道为什么OP接受了这个答案。 - user153275
@dpk 感谢通知,已经修正。 - Kartik Domadiya
我已经纠正了代码,使其可以编译,希望我的编辑会被接受。 - ProjectDelta

5
问题在这里。
 spin.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> adapter, View view, int pos,
            long id) {
        // TODO Auto-generated method stub

        String data= spin.getItemAtPosition(pos).toString();
        Toast.makeText(second.this, data, Toast.LENGTH_SHORT).show();
    }

});

试着把它替换为以下内容,

 spin.OnItemSelectedListener (new OnItemSelectListener() {

    public void onItemSelect(AdapterView<?> adapter, View view, int pos,
            long id) {
        // TODO Auto-generated method stub

        String data= spin.getItemAtPosition(pos).toString();
        Toast.makeText(second.this, data, Toast.LENGTH_SHORT).show();
    }

});

1
再次强调,如何将OnItemClickListener设置为OnItemSelectedListener?这是无效的。 - atreat
OnItemSelectedListener是一个接口,需要实现两个方法,分别是: onItemSelected(AdapterView<?> parent, View view, int position, long id)和 public void onNothingSelected(AdapterView<?> parent)。 - ProjectDelta

4

在您的oncreate()方法中存在问题:

spin = (Spinner) findViewById(R.id.spin);

你将结果分配给本地变量/引用spinner。main.spinner类字段仍为null。这就是为什么calculate()方法中会出现NullPointerException的原因。

请使用以下代码替换上面的行:

this.spin = (Spinner) findViewById(R.id.spin);

ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item,androidBooks);
spin.setAdapter(adapter);

0
请尝试这个。
 spinner = (Spinner) findViewById(R.id.spinner);
 List<String> categories = new ArrayList<String>();
    categories.add("--Qualification--");
    categories.add("High School");
    categories.add("Higher Secondary/PUC");
    categories.add("Diploma");
    categories.add("Degree");
    categories.add("Master Degree");


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    R.layout.spinnertext, categories);
    adapter.setDropDownViewResource(android.R.layout.select_dialog_item);
    spinner.setAdapter(adapter);

点击此链接查看


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接