0

電卓アプリを作成しましたが、いくつかの情報を表示するページを作成しようとしています。 ここに画像の説明を入力 OK ボタンは setContentView(originallayout.xml) とコード化され、電卓のレイアウトに戻ります。

[OK] ボタンを宣言するには、これらのコードをどこに配置すればよいですか?

private Button btnOK;

btnOK = (Button)findViewById(R.id.btnOK);

btnok.setOnClickListener(OKListener);

これらのコードをメイン レイアウトのボタンのすぐ下に配置しようとしましたが、起動後にアプリが停止しました。

07-18 09:39:43.290: E/AndroidRuntime(6984): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hychentsa.calculator/com.hychentsa.calculator.CalculatorActivity}: java.lang.NullPointerException

4

2 に答える 2

2

setContentView() を使用して画面を変更する代わりに、別のアクティビティを用意する必要があります。次に、about アクティビティで、ボタンのクリック時に finish() を呼び出すだけで、メイン アクティビティに戻ることができます。

http://developer.android.com/reference/android/app/Activity.html#startActivity(android.content.Intent)

于 2013-07-18T14:48:16.937 に答える
1

レイアウトにボタンの id が含まれていない場合 (あなたの場合btnOK)、Eclipse は NullPointerException をスローします - レイアウトのコンテンツでそれを見つけることができません。したがって、レイアウト (またはメニュー) を設定するときは、id btnOK をコンテンツにする必要があります。それをチェックしてください!

このコードをすべて入れた後 にボタンの初期化を入れますsetContentView(R.layout.your_about_layout_name);

Button btnOK;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);

btnOK = (Button)findViewById(R.id.btnOK);
btnok.setOnClickListener(OKListener);
}

更新: invertigo の回答を見てください: ボタンをクリックしたときにレイアウトを変更するのは間違っています。このようにする必要があります:

電卓アクティビティ

public class CalculatorActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator_black);

// initialization of your views stays here
}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.calculator_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.your_id_to_go_in_about_activity:
                Intent intent = new Intent(CalculatorActivity.this, AboutActivity.class);

                // put some extras if you need to send information from this page to the
                // AboutActivity page with this code: intent.putExtra();
                startActivity(intent); // with this code you go to AboutActivity
                return true;
            case R.id.theme:
                // Do Something with the theme
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

さて、OKButton の初期化の場所は新しいクラスにあります。ここで AboutActivityと呼び ましょう。以前のコードを配置できます。

public class AboutActivity extends Activity{

Button btnOK;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);

btnOK = (Button)findViewById(R.id.btnOK);
btnok.setOnClickListener(OKListener);
}

 // and the listener for your OK button have to look like this:
OnClickListener OKListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Do something here if you need
            finish(); // with finish() you are returning to the previous page
            // which is CalculatorActivity
        }
    };
}
于 2013-07-18T10:33:33.997 に答える