0

ユーザーがボタンを押したときにテキストを変更するこのコードは機能しません。なんで?

package com.cookbook.simple_activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class activity extends Activity {
    private TextView txt = (TextView) findViewById(R.id.hello_text);
    Button startButton = (Button) findViewById(R.id.trigger);
   @Override
   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple);


   startButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            txt.setText(R.string.pressthisbutton);
        }
    });
 }
}
4

4 に答える 4

2

に変更します

    public class activity extends Activity {
    private TextView txt;
    Button startButton;
   @Override
   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple);
        txt = (TextView) findViewById(R.id.hello_text);
        startButton = (Button) findViewById(R.id.trigger);

Views膨らませた後、初期化する必要があります。あなたはあなたの中に存在するので、あなたが最初に膨らませていない場合、それらは戻ってきます。それらを宣言する前に宣言することはできますが、後まで初期化することはできません。layoutsetContentView()ViewslayoutnulllayoutsetContentView()

txtまた、内部にアクセスしようとしているため、上記のようにメンバー変数として宣言listenerするか、メンバー変数として宣言する必要がありますfinal

これは見つけやすいものでしたが、常にそうであるとは限りません。質問を投稿するときは、何が機能していないか、どのように機能していないかを説明してください。ここでは、NPEを設定しようとするとクラッシュするのではないかとlistener思います。Buttonクラッシュした場合は、logcat を提供してください。問題を特定しやすくなります。

編集

xml を見た後、stringクリックしたときのテキストと同じ値を最初のテキストに使用しているButtonため、もちろん変更されません。ここで何を求めているのかわかりませんが、コードは書かれているとおりに実行されています。

于 2013-09-15T05:04:08.363 に答える
0

問題は、レイアウトがandroid_simpleであることです

setContentView(R.layout.activity_simple);

しかし、あなたは contentView を activity_simple として設定しています

編集:1これを行います

setContentView(R.layout.activity_simple); onCreate でのtextViewとボタンの初期化

TextView txt = null;
Button startButton = null;

 @Override
   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple);
    txt = (TextView) findViewById(R.id.hello_text);
    startButton = (Button) findViewById(R.id.trigger);

   startButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            txt.setText(R.string.pressthisbutton);
        }
    });
 }
于 2013-09-15T05:06:08.917 に答える
0

このコードを試してください....

を宣言する必要があります

 TextView txt = (TextView) findViewById(R.id.hello_text); 

 Button startButton = (Button) findViewById(R.id.trigger);

create メソッドの後、それ以外の場合は、id android を認識しません。アクティビティのライフサイクルは、

onCreate()方法

package com.cookbook.simple_activity;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    public class activity extends Activity {
       @Override
       public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_simple);

        TextView txt = (TextView) findViewById(R.id.hello_text);
        Button startButton = (Button) findViewById(R.id.trigger);

       startButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                txt.setText(R.string.pressthisbutton);
            }
        });
     }
    }
于 2013-09-15T04:56:53.740 に答える
0

これを試して:

txt.setText(getResources().getString(R.string.pressthisbutton));
于 2013-09-15T05:42:50.273 に答える