Spinner在android中不起作用

Sil*_*ler 3 android spinner

Spinner无法正常工作.这是我的代码:

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();
               }    
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*lva 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();
    }

});
Run Code Online (Sandbox Code Playgroud)

尝试更换它,如下所示,

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

});
Run Code Online (Sandbox Code Playgroud)


Kar*_*iya 5

你犯的唯一错误是你设置了不同的事件监听器..

听众OnItemClickListener是为ListView......

因为Spinner你必须设置OnItemSelectedListener..

尝试替换OnItemClickListenerOnItemSelectedListener喜欢:

spin.OnItemSelectedListener (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();
    }

});
Run Code Online (Sandbox Code Playgroud)

  • 这有效吗?你正在设置一个OnItemSelectedListener与OnItemClickListener? (6认同)
  • 我试过你发布的那段代码.它会抛出编译器错误.我的"理解"是你需要spin.OnItemSelectedListener(new OnItemSelectedListener()...而OnItemSelectedListeners没有你提到的回调.他们只有OnItemSelected()和OnNothingSelected()http://developer.android.com/reference /android/widget/AdapterView.OnItemSelectedListener.html (2认同)

kan*_*pan 5

这是你的oncreate()方法中的问题:

spin = (Spinner) findViewById(R.id.spin);
Run Code Online (Sandbox Code Playgroud)

您将结果分配给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);
Run Code Online (Sandbox Code Playgroud)