单击按钮后我尝试显示HelloWorld时Android应用程序崩溃

时间:2012-08-14 10:27:37

标签: android

我编写了一个应该显示按钮的简单应用程序,当点击该按钮时,它将显示文本:“Hello World” - 但它现在所做的一切都在崩溃。

XML是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text=""
        tools:context=".GraphicsActivity" />

    <Button xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/button_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Write Something..."
        android:onClick="writeMsg" />
</RelativeLayout>

Android源代码在这里:

public class GraphicsActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_graphics);
    }

    public void WriteMsg() {

        Button button = (Button) findViewById(R.id.button_send);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                TextView tv = (TextView) findViewById(R.id.hello);
                tv.setText("Hello World");
                setContentView(tv);
            }
        });
    }
}

正如我所说,它所做的一切都是崩溃。顺便说一下,我在模拟器中运行它。

7 个答案:

答案 0 :(得分:2)

您的代码有几个问题    a)首先,如果您决定将单击事件附加到XML代码中的Button,则调用的方法应采用View参数。

签名应该是这样的:

public void WriteMsg(View view) {
}

b)其次,方法的名称应与onClick属性的值相匹配 实际上你有这个用XML:

android:onClick="writeMsg"

这是方法的缩小:

public void WriteMsg()

注意第一个字母是大写的。

c)最后一个,没有必要在button_send方法中为WriteMsg()设置点击监听器。您已通过声明onClick属性附加了单击事件侦听器。这可能会导致其他问题。

因此,您要么删除onClick属性,要么删除在button_send方法中为WriteMsg设置侦听器的代码。

答案 1 :(得分:1)

试试这个

public class GraphicsActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_graphics);
        Button button = (Button) findViewById(R.id.button_send);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                TextView tv = (TextView) findViewById(R.id.hello);
                tv.setText("Hello World");
            }
        });
    }
}

答案 2 :(得分:0)

public class GraphicsActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_graphics);
        Button button = (Button) findViewById(R.id.button_send);
        WriteMsg();
    }

    public void WriteMsg() {
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                TextView tv = (TextView) findViewById(R.id.hello);
                tv.setText("Hello World");
                setContentView(tv);
            }
        });
    }
}

答案 3 :(得分:0)

试试这个

   TextView tv = (TextView) findViewById(R.id.hello); 

在您的onCreate()方法中写下此内容。并在按钮的`onClickListener()'中使用Toast

 Toast.makeText(getApplicationContext(), "Discard", 10000).show();

这会对你有所帮助

答案 4 :(得分:0)

TextView tv = (TextView) findViewById(R.id.hello);

尝试在按钮中找到您的文本视图,而不是在整个布局中(因为方法属于按钮)。 你应该这样做:

public void WriteMsg() {

    Button button = (Button) findViewById(R.id.button_send);
    final TextView tv = (TextView) findViewById(R.id.hello);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            tv.setText("Hello World");

        }
    });

    }

答案 5 :(得分:0)

例外是

  

机器人:的onClick = “writeMsg”

但您的活动的onclick功能为WriteMsg。将其更改为小写writeMsg。 您最有可能获得方法未找到异常

答案 6 :(得分:0)

public class MainActivity extends Activity {

public TextView tv;
public Button btn_click;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn_click = (Button) findViewById(R.id.button1);
    tv = (TextView) findViewById(R.id.textView1);

    btn_click.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            writeText("Text to display");
        }
    });

}

private void writeText(String string) {
    tv.setText(string);
}

}