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>

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

私が言うように、それはクラッシュするだけです。ちなみにエミュレータで動かしてます。

4

7 に答える 7

2

コードにいくつかの問題があります。
a) まず、XML コードからボタンにクリック イベントをアタッチすることにした場合、呼び出されるメソッドは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
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 に答える
0

例外は

Android:onClick="書き込みメッセージ"

しかし、あなたのアクティビティにはonclick機能があります WriteMsg. 小文字に変更しwriteMsgます。ほとんどの場合、メソッドが見つからないという例外が発生しています

于 2012-08-14T10:34:17.673 に答える
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
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); 

これをメソッドに記述し、ボタンの「onClickListener()」でonCreate()使用します。Toast

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

これはあなたを助けるでしょう

于 2012-08-14T10:31:50.170 に答える