1

Spinnerユーザーが選択できるリストを表示してから、選択して別のにバインドしようとしていますarray。ユーザーが選択した値surfaceCodeは、後で使用するために保存されます。Spinner配列R.array.surface_optionとバインドする配列がR.array.surface_code整列され、xmlに保存されます。

これは私のコードです...

spinnerSurface = (Spinner) findViewById(R.id.spinnerSurface);
ArrayAdapter<CharSequence> adapterSurface = ArrayAdapter.createFromResource(this, R.array.surface_option, android.R.layout.simple_spinner_item);
adapterSurface.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerSurface.setAdapter(adapterSurface);

spinnerSurface.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
        TextView tx = (TextView)v; 
        Log.i("\n\nid",String.valueOf(tx.getText()));
        String surfaceCode = getResources().getStringArray(R.array.surface_code)[spinnerSurface.getSelectedItemPosition()];
    }

    public void onNothingSelected(AdapterView<?> arg0) {
    } 
});

Log.d("code outside", surfaceCode.trim() + " is equal to SW: " + surfaceCode.trim().equals("SW"));

おそらくそれがを返すため、surfaceCodeエラーとして出てきます。私のコードの何が問題になっていますか?process stopped unexpectedlynull

4

1 に答える 1

1

匿名リスナーのコードは選択が行われたときにのみ実行されるため、最後のコード行で surfaceCode を null にすることができます。

これにより、最後の行で NullPointerException が発生します。

onItemSelected() が呼び出されても、それをシャドウしている同じ名前のローカル変数を宣言しているため、メンバー surfaceCode は設定されません。

surfaceCode の前の "String " を削除し、ログ ステートメントを onItemSelected() 内に配置する必要があります。

于 2012-06-18T12:05:46.557 に答える