0

This code to change text when the user presses a button doesn't work. Why?

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()。由于您Views存在于您的 中,因此如果您没有先膨胀layout,它们将返回。您可以在您之前声明它们,但直到之后才能初始化它们。nulllayoutsetContentView()

此外,由于您试图txt在您的内部访问,listener它必须是final或声明为上面的成员变量。

这是一个相当容易发现的地方,但并非总是如此。当您发布问题时,请尝试描述什么不起作用以及如何。在这里,NPE我猜当您尝试设置时listenerButton会崩溃。当它确实崩溃时,请提供 logcat,以便我们更容易发现问题。

编辑

在看到您的 xml 后,您string对初始文本使用的值与单击时的文本值相同,Button所以它当然不会改变。我不确定您在这里追求什么,但代码正在按其编写的方式运行。

于 2013-09-15T05:04:08.363 回答
0

问题是你的布局是android_simple

setContentView(R.layout.activity_simple);

但是您将 contentView 设置为activity_simple

编辑:1这样做

在 onCreate 中初始化 textView 和按钮,因为这 setContentView(R.layout.activity_simple); 说明了在哪里可以找到视图,但是您在告诉布局文件之前设置了视图

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 Activity 生命周期以

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 回答