-1

---- setcontentview の下でスピナー変数とテキストビュー変数を移動しようとしましたが、スピナーは公には知られていないため、void onitemselected で使用できます。どうすればよいですか??? ------

----- また、スピナーを正しく使用しているかどうかもわかりません -----

わかりましたので、スピナーを使用してそれらから値を取得し、それをランダムに生成されたものと比較し、それらが正しい場合はテキストビューでそれらを赤でなくても緑として表示し、テストするためだけに 1 つのスピナーに対してこの IF ステートメントのみを実行しましたしかし、それは強制的に閉じます。

MainPage.java

package com.example.decrypter;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class MainPage extends Activity implements OnItemSelectedListener {
    double random1;
    int check1,check2,check3,check4,check5;

    EditText textbox;
    int guess;
    String s;
    Spinner spinner1 = (Spinner) findViewById(R.id.spinner01);
    Spinner spinner2 = (Spinner) findViewById(R.id.spinner02);
    Spinner spinner3 = (Spinner) findViewById(R.id.spinner03);
    Spinner spinner4 = (Spinner) findViewById(R.id.spinner04);
    Spinner spinner5 = (Spinner) findViewById(R.id.spinner05);
    TextView display1 = (TextView) findViewById(R.id.txtdisplay1);
    TextView display2 = (TextView) findViewById(R.id.txtdisplay2);
    TextView display3 = (TextView) findViewById(R.id.txtdisplay3);
    TextView display4 = (TextView) findViewById(R.id.txtdisplay4);
    TextView display5 = (TextView) findViewById(R.id.txtdisplay5);

    Integer[] numbers = {1,2,3,4,5,6,7,8,9};

    Button btnrandom = (Button) findViewById(R.id.btnrandom);
    Button btn1 = (Button) findViewById(R.id.btn1);
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        ArrayAdapter <Integer> adapter1 = new ArrayAdapter <Integer>(this,       android.R.layout.simple_spinner_item, numbers);

        setContentView(R.layout.activity_main_page);
        spinner1.setAdapter(adapter1);
        spinner1.setOnItemSelectedListener(this);
        spinner2.setAdapter(adapter1);
        spinner2.setOnItemSelectedListener(this);
        spinner3.setAdapter(adapter1);
        spinner3.setOnItemSelectedListener(this);
        spinner4.setAdapter(adapter1);
        spinner4.setOnItemSelectedListener(this);
        spinner5.setAdapter(adapter1);
        spinner5.setOnItemSelectedListener(this);

        btnrandom.setOnClickListener( new View.OnClickListener() 
        { 

           public void onClick(View v) {
            // TODO Auto-generated method stub
            random1 = Math.floor(Math.random()*10); 
            //display.setText("random:" + random1);     
            /*check1 = Integer.parseInt(spinner1.getSelectedItem().toString())     ; 
            */
        }
       });

        btn1.setOnClickListener( new View.OnClickListener() 
        { 

           public void onClick(View v) {
            // TODO Auto-generated method stub

            if(check1==random1){
                display1.setTextColor(Color.GREEN);
                display1.setText(s);
            }
            else{
                display1.setTextColor(Color.RED);
                display1.setText(s);
            }   
        }
       });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main_page, menu);
        return true;

    }

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

        check1 = Integer.parseInt(spinner1.getSelectedItem().toString());
        check2 = Integer.parseInt(spinner2.getSelectedItem().toString()) ;
        check3 = Integer.parseInt(spinner3.getSelectedItem().toString()) ;
        check4 = Integer.parseInt(spinner4.getSelectedItem().toString()) ;
        check5 = Integer.parseInt(spinner5.getSelectedItem().toString()) ;

    }

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

    }
}

Androidマニフェスト

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.decrypter"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainPage"
        android:label="@string/title_activity_main_page" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

4

3 に答える 3

1
public class MainPage extends Activity implements OnItemSelectedListener {
    double random1;
    int check1,check2,check3,check4,check5;

    EditText textbox;
    int guess;
    String s;
Spinner spinner1,spinner2,spinner3,spinner4,spinner5;
  TextView display1,display2,display3,display4,display5;
Button btnrandom,btn1;

    Integer[] numbers = {1,2,3,4,5,6,7,8,9};


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

              setContentView(R.layout.activity_main_page);
 spinner1 = (Spinner)findViewById(R.id.spinner01);
     spinner2 = (Spinner)findViewById(R.id.spinner02);
     spinner3 = (Spinner)findViewById(R.id.spinner03);
     spinner4 = (Spinner)findViewById(R.id.spinner04);
     spinner5 = (Spinner)findViewById(R.id.spinner05);
     display1 = (TextView)findViewById(R.id.txtdisplay1);
     display2 = (TextView)findViewById(R.id.txtdisplay2);
     display3 = (TextView)findViewById(R.id.txtdisplay3);
     display4 = (TextView)findViewById(R.id.txtdisplay4);
    display5 = (TextView)findViewById(R.id.txtdisplay5);
 btnrandom = (Button)findViewById(R.id.btnrandom);
    btn1 = (Button)findViewById(R.id.btn1);

        spinner1.setAdapter(adapter1);
        spinner1.setOnItemSelectedListener(this);
        spinner2.setAdapter(adapter1);
        spinner2.setOnItemSelectedListener(this);
        spinner3.setAdapter(adapter1);
        spinner3.setOnItemSelectedListener(this);
        spinner4.setAdapter(adapter1);
        spinner4.setOnItemSelectedListener(this);
        spinner5.setAdapter(adapter1);
        spinner5.setOnItemSelectedListener(this);

  ArrayAdapter <Integer> adapter1 = new ArrayAdapter <Integer>(this,       android.R.layout.simple_spinner_item, numbers);

        btnrandom.setOnClickListener( new View.OnClickListener() 
        { 

           public void onClick(View v) {
            // TODO Auto-generated method stub
            random1 = Math.floor(Math.random()*10); 
            //display.setText("random:" + random1);     
            /*check1 = Integer.parseInt(spinner1.getSelectedItem().toString())     ; 
            */
        }
       });

        btn1.setOnClickListener( new View.OnClickListener() 
        { 

           public void onClick(View v) {
            // TODO Auto-generated method stub

            if(check1==random1){
                display1.setTextColor(Color.GREEN);
                display1.setText(s);
            }
            else{
                display1.setTextColor(Color.RED);
                display1.setText(s);
            }   
        }
       });
    }
于 2012-11-08T21:23:37.837 に答える
0

強制終了は、display1 でのヌル ポインター例外の結果として発生する可能性が非常に高いです。レイアウトを初期化した後、onCreate() でインスタンスを探す必要があります。そうしないと、android は findViewById() を介してそのスピナーを見つけることができません。

参照: http://developer.android.com/training/basics/activity-lifecycle/starting.html#Create

于 2012-11-08T21:15:21.943 に答える
0

あなたはこれをやっていますSpinner spinner1 = (Spinner) findViewById(R.id.spinner01);

変数を宣言するときにクラスで。これらの宣言はクラスのどのメソッドの外側にもあるため、クラスがロードされたとき、メソッド コード (onCreate() で始まる) が呼び出される前に評価されます。

findViewById現在ロードされているレイアウトから一致する ID を持つビューを検索し、見つかった場合はそのインスタンスを返します。見つからない場合、またはレイアウトが読み込まれていない場合は、null が返されます。

null を返すため、インスタンスを初めて使用しようとすると、null ポインター例外が発生します。

あなたの場合、onCreate() で行う必要がある setContentView() を呼び出した後、fndViewById を使用する必要があります。

問題を解決するには、次のようにクラス レベルで変数を宣言し、Spinner spinner1;次に setContentView の後にインスタンスを次のように設定します。spinner1 = (Spinner) findViewById(R.id.spinner01);

ビューが存在しない場合に例外を発生させるのではなく、findViewById が null を返すことは完全に論理的です。シナリオによっては、ユーザー入力に応じて実行時に複雑な動的レイアウトが決定される可能性があるため、そのようなものif (findViewById(R.id.someview)==null)が有効です。

于 2012-11-08T21:38:47.593 に答える