web-dev-qa-db-ja.com

Androidでスピナーの位置を取得する

選択したアイテムに応じて毎回異なるマップを表示する別のアクティビティで使用するように選択したときにスピナーの位置(番号)を取得しようとしています。アプリケーションを実行するとクラッシュします。これが最初のアクティビティコードです。

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

        });

    }

}
34

スピナーの選択を取得する方法は次のとおりです。

_  spinner1.getSelectedItemPosition();
_

ドキュメントリファレンス: http://developer.Android.com/reference/Android/widget/AdapterView.html#getSelectedItemPosition()

ただし、コードでは、参照する場所はsetOnItemSelectedListener()内です。 onItemSelectedメソッドは位置を「位置」変数として渡すため、スピナーをポーリングする必要はありません。

したがって、その行を次のように変更できます。

_TestProjectActivity.this.number = position + 1;
_

それでも問題が解決しない場合は、アプリがクラッシュしたときに生成されたエラーメッセージを投稿してください。

85
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
user4422478
    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

        }
    });
1