在Android中获取Spinner的位置

43

我试图获取Spinner选择时的位置(数字),以便在另一个Activity中使用它,每次根据所选项目显示不同的地图。当我运行应用程序时,它会崩溃。这是第一个Activity的代码:

public class TestProjectActivity extends Activity {
    public Spinner spinner1;
    public Integer number;
    private Button valideButton;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MySpinner();
        valide_button();

    }

    public void MySpinner() {

        final Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.num, android.R.layout.simple_spinner_item);
                                      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner1.setAdapter(adapter);

        spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parentView,
                    View selectedItemView, int position, long id) {
                // Object item = parentView.getItemAtPosition(position);

                TestProjectActivity.this.number = spinner1
                        .getSelectedItemPosition() + 1;

            }

            public void onNothingSelected(AdapterView<?> arg0) {// do nothing
            }

        });

    }

    public void valide_button() {

        valideButton = (Button) findViewById(R.id.valide_button);
        valideButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                Intent intent = new Intent(TestProjectActivity.this,
                        MetroMapActivity.class);
                startActivity(intent);
            }

        });

    }

}
4个回答

113

获取Spinner的选中项的方法是:

  spinner1.getSelectedItemPosition();

文档参考链接:http://developer.android.com/reference/android/widget/AdapterView.html#getSelectedItemPosition()

然而,在您的代码中,您唯一引用它的地方是在setOnItemSelectedListener()中。没有必要轮询Spinner,因为 onItemSelected方法会将位置作为“position”变量传递。

所以你可以将该行更改为:

TestProjectActivity.this.number = position + 1;
如果那样做没有解决问题,请发布应用程序崩溃时生成的错误信息。

已经在代码中了,但当我尝试在另一个活动中使用“number”时,它会崩溃。 - Khaled Ben Aissa
尝试将“number”移入应用程序类中。活动变量最好留在活动中。或者,尝试将数字设置为静态成员。阅读这里:https://dev59.com/nm855IYBdhLWcg3wq2XL - Plastic Sturgeon
太棒了!我创建了一个应用程序类,它将保存我在两个活动之间共享的数据。干杯! - Khaled Ben Aissa

3
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt = findViewById(R.id.button);
        spinner = findViewById(R.id.sp_item);
        setInfo();
        spinnerAdapter = new SpinnerAdapter(this, arrayList);
        spinner.setAdapter(spinnerAdapter);



        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                //first,  we have to retrieve the item position as a string
                // then, we can change string value into integer
                String item_position = String.valueOf(position);

                int positonInt = Integer.valueOf(item_position);

                Toast.makeText(MainActivity.this, "value is "+ positonInt, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });







note: the position of items is counted from 0.

1
if (position ==0) {
    if (rYes.isChecked()) {
        Toast.makeText(SportActivity.this, "yes ur answer is right", Toast.LENGTH_LONG).show();
    } else if (rNo.isChecked()) {
        Toast.makeText(SportActivity.this, "no.ur answer is wrong", Toast.LENGTH_LONG).show();
    }
}

这段代码应该可以选择两个复选框。
有问题吗?

1
    final int[] positions=new int[2]; 
    Spinner sp=findViewByID(R.id.spinner);

    sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub
            Toast.makeText( arg2....);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

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