0

我编写了一个简单的应用程序,它应该显示一个按钮,当单击该按钮时,它将显示文本:'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>

安卓源码在这里:

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);
            }
        });
    }
}

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

4

7 回答 7

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_sendWriteMsg方法中设置侦听器的代码。

于 2012-08-14T10:37:29.917 回答
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");
            }
        });
    }
}
于 2012-08-14T10:34:29.267 回答
0

例外是在

android:onClick="writeMsg"

但您的活动具有 onclick 功能,如 WriteMsg. 将其更改为小写writeMsg。你很可能得到方法未找到异常

于 2012-08-14T10:34:17.673 回答
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);
            }
        });
    }
}
于 2012-08-14T10:31:23.117 回答
0

尝试这个

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

将其写入您的方法中onCreate()Toast并在您的按钮的“onClickListener()”中使用。

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

这将帮助你

于 2012-08-14T10:31:50.170 回答
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);
}

}

于 2012-08-14T11:10:56.703 回答
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");

        }
    });

    }
于 2012-08-14T10:33:22.540 回答