从按钮点击android显示随机月份?

时间:2014-09-11 20:27:52

标签: java android xml

我正在尝试创建一个应用程序,让用户单击一个按钮,它将显示一个随机的月份。我在strings.xml文件中创建了一个字符串数组。 Bellow是我的main.java,strings.xml和activity.xml。我尝试运行应用程序,它只是强行关闭。

package com.example.datebutton;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.graphics.Color;

public class Main extends Activity
{
Button btn;

@Override
public void onCreate(Bundle b)
{
    super.onCreate(b);
    setContentView(R.layout.activity_main);
    btn = (Button) findViewById(R.id.btn1);

    final String[] months = getResources().getStringArray(R.array.Months);
    final TextView tv =(TextView)findViewById(R.id.text1);

    btn.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v) 
        {
            int rand = (int) (Math.random() * 12);
            tv.setText(months[rand]);

        }
    });

}

}

这是我的activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
    android:id="@+id/btn1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="updateMonth"
    android:text="@string/app_name" />

<TextView
    android:id="@+id/text1"
    android:layout_width="68dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center_vertical"
    android:text="@array/Months" />

</LinearLayout>

这是我的strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="app_name">DateButton</string>

<string-array name="Months">
    <item>January</item>
    <item>Feburary</item>
    <item>March</item>
    <item>April</item>
    <item>May</item>
    <item>June</item>
    <item>July</item>
    <item>August</item>
    <item>September</item>
    <item>October</item>
    <item>November</item>
    <item>December</item>
</string-array>

</resources>

我仍然收到错误,应用程序仍然说遗憾的是您的应用已关闭。 logcat在下面。

09-11 16:55:17.472:W / Resources(1638):转换为字符串:TypedValue {t = 0x1 / d = 0x7f0c0000 a = -1 r = 0x7f0c0000} 09-11 16:55:17.512:D / AndroidRuntime(1638):关闭VM 09-11 16:55:17.512:W / dalvikvm(1638):threadid = 1:线程退出未捕获的异常(group = 0xb3a8fba8) 09-11 16:55:17.532:E / AndroidRuntime(1638):致命异常:主要 09-11 16:55:17.532:E / AndroidRuntime(1638):进程:com.example.datebutton,PID:1638 09-11 16:55:17.532:E / AndroidRuntime(1638):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.datebutton / com.example.datebutton.Main}:java.lang.ClassCastException:android .widget.TextView无法强制转换为android.widget.Button 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.access $ 800(ActivityThread.java:135) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.os.Handler.dispatchMessage(Handler.java:102) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.os.Looper.loop(Looper.java:136) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.main(ActivityThread.java:5017) 09-11 16:55:17.532:E / AndroidRuntime(1638):at java.lang.reflect.Method.invokeNative(Native Method) 09-11 16:55:17.532:E / AndroidRuntime(1638):at java.lang.reflect.Method.invoke(Method.java:515) 09-11 16:55:17.532:E / AndroidRuntime(1638):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 09-11 16:55:17.532:E / AndroidRuntime(1638):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 09-11 16:55:17.532:E / AndroidRuntime(1638):at dalvik.system.NativeStart.main(Native Method) 09-11 16:55:17.532:E / AndroidRuntime(1638):引起:java.lang.ClassCastException:android.widget.TextView无法强制转换为android.widget.Button 09-11 16:55:17.532:E / AndroidRuntime(1638):at com.example.datebutton.Main.onCreate(Main.java:24) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.Activity.performCreate(Activity.java:5231) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 09-11 16:55:17.532:E / AndroidRuntime(1638):... 11更多

2 个答案:

答案 0 :(得分:0)

在尝试实例化按钮对象btn之前,您忘记添加以下行:setContentView(R.layout.activity);

答案 1 :(得分:0)

要在您的活动中使用布局,您必须将它们连接在一起。以下是您的代码的外观:

@Override
public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.activity);
    btn = (Button) findViewById(R.id.btn1);
    final String[] months = getResources().getStringArray(R.array.Months);
    final TextView tv =(TextView)findViewById(R.id.text1);

    btn.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            int r, g, b;
            int rand = (int) (Math.random() * 12);
            tv.setText(months[rand]);
        }
    });
}