1

我正在尝试使用 ImageView 模拟骰子。当我单击按钮时,似乎什么也没有发生。为了调试目的,我已经对这个示例进行了硬编码,用 imageView4 替换图像(我确保随机不会失败)。现在,当我在 2.2 vanilla 模拟器上运行它时,应用程序崩溃了。谁能指出我做错了什么?我是 Java、Eclipse 和 Android 的新手,所以我确信我可能犯了不止一个错误。

爪哇:

package mobile.applications.yahztee4;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;

public class Yahtzee4Activity extends Activity {
    /** Called when the activity is first created. */

    ImageButton dice1, dice2, dice3, dice4, dice5;
    Button roll, begin;

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

        PlayGame();

    }

    public void PlayGame()  
    {  
        dice1 = (ImageButton)findViewById(R.id.btndice1);  

        begin = (Button)findViewById(R.id.btnroll);
        roll = (Button)findViewById(R.id.btnbegin);

        begin.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Random rand = new Random();     
                int rndInt = rand.nextInt(6) + 1; // Random number between 1 and 6

                String imgName = "die" + rndInt;

                int id = getResources().getIdentifier(imgName, "drawable", getPackageName());  
                dice1.setImageResource(id);                 
            }
        });  
    }  
}

按钮的 XML:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" 
    android:baselineAligned="false" >

    <TableLayout
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1.13" >


        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/textView5"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="1&apos;s" />

            <TextView
                android:id="@+id/textView1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />

            <TextView
                android:id="@+id/textView9"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="3 of Kind" />

            <TextView
                android:id="@+id/textView10"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />

        </TableRow>


        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/textView2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="2&apos;s" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />


            <TextView
                android:id="@+id/textView11"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="4 of Kind" />

            <TextView
                android:id="@+id/textView12"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />
        </TableRow>


        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/textView3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="3&apos;s" />

            <TextView
                android:id="@+id/textView7"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />

            <TextView
                android:id="@+id/textView13"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Full House" />

            <TextView
                android:id="@+id/textView14"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />
        </TableRow>


        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/textView4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="4&apos;s" />

            <TextView
                android:id="@+id/textView8"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />

            <TextView
                android:id="@+id/textView15"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Sm Straight" />

            <TextView
                android:id="@+id/textView16"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />
        </TableRow>


         <TableRow
             android:id="@+id/tableRow5"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" >

             <TextView
                 android:id="@+id/textView17"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="5&apos;s" />

             <TextView
                 android:id="@+id/textView18"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />

             <TextView
                 android:id="@+id/textView19"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Lg Straight" />

             <TextView
                 android:id="@+id/textView20"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />
         </TableRow>

         <TableRow
             android:id="@+id/tableRow6"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" >

             <TextView
                 android:id="@+id/textView21"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="6&apos;s" />

             <TextView
                 android:id="@+id/textView22"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />

             <TextView
                 android:id="@+id/textView23"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Yahtzee" />

             <TextView
                 android:id="@+id/textView24"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />
         </TableRow>

         <TableRow
             android:id="@+id/tableRow7"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" >

             <TextView
                 android:id="@+id/textView25"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Bonus (35)" />

             <TextView
                 android:id="@+id/textView26"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />

             <TextView
                 android:id="@+id/textView27"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Chance" />

             <TextView
                 android:id="@+id/textView28"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />
         </TableRow>

         <TableRow
             android:id="@+id/tableRow8"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" >

             <TextView
                 android:id="@+id/textView29"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Upper Score" />

             <TextView
                 android:id="@+id/textView30"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />

             <TextView
                 android:id="@+id/textView31"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Lower Score" />

             <TextView
                 android:id="@+id/textView32"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />
         </TableRow>

         <TableRow
             android:id="@+id/tableRow9"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" >

             <TextView
                 android:id="@+id/textView33"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Yz Bonus" />

             <TextView
                 android:id="@+id/textView34"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />

             <TextView
                 android:id="@+id/textView35"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Total Score" />

             <TextView
                 android:id="@+id/textView36"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />
         </TableRow>

         <TableRow
             android:id="@+id/tableRow10"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" >

             <TextView
                 android:id="@+id/textView37"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Turn#" />

             <TextView
                 android:id="@+id/textView38"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="TextView" />

             <TextView
                 android:id="@+id/textView39"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Total Score" />

             <TextView
                 android:id="@+id/textView40"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="Roll #" />
         </TableRow>

         <TableRow
              android:id="@+id/tableRow11"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:gravity="center" >

              <ImageView
                  android:id="@+id/btndice1"
                  android:layout_width="60dip"
                  android:layout_height="70dip"
                  android:padding="2dip" />              
              <ImageView
                  android:id="@+id/btndice2"
                  android:layout_width="60dip"
                  android:layout_height="70dip"
                  android:padding="2dip" />

              <ImageView
                  android:id="@+id/btndice3"
                  android:layout_width="60dip"
                  android:layout_height="70dip"
                  android:padding="2dip" />

              <ImageView
                  android:id="@+id/btndice4"
                  android:layout_width="60dip"
                  android:layout_height="70dip"
                  android:padding="2dip" />

              <ImageView
                  android:id="@+id/btndice5"
                  android:layout_width="60dip"
                  android:layout_height="70dip"
                  android:padding="2dip" />

        </TableRow>

          <Button
              android:id="@+id/btnroll"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/roll" 
          />

          <Spinner
              android:id="@+id/spinner"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:prompt="@string/score_prompt_spinner" />

          <Button
              android:id="@+id/btnbegin"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/begin" />

    </TableLayout>


</LinearLayout>

错误日志文件

06-10 18:21:31.674: D/AndroidRuntime(705): Shutting down VM
06-10 18:21:31.674: W/dalvikvm(705): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-10 18:21:31.684: E/AndroidRuntime(705): FATAL EXCEPTION: main
06-10 18:21:31.684: E/AndroidRuntime(705): java.lang.RuntimeException: Unable to start activity ComponentInfo{michelle.harris.yahztee4/michelle.harris.yahztee4.Yahtzee4Activity}: java.lang.ClassCastException: android.widget.ImageView
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.os.Looper.loop(Looper.java:123)
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-10 18:21:31.684: E/AndroidRuntime(705):  at java.lang.reflect.Method.invokeNative(Native Method)
06-10 18:21:31.684: E/AndroidRuntime(705):  at java.lang.reflect.Method.invoke(Method.java:521)
06-10 18:21:31.684: E/AndroidRuntime(705):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-10 18:21:31.684: E/AndroidRuntime(705):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-10 18:21:31.684: E/AndroidRuntime(705):  at dalvik.system.NativeStart.main(Native Method)
06-10 18:21:31.684: E/AndroidRuntime(705): Caused by: java.lang.ClassCastException: android.widget.ImageView
06-10 18:21:31.684: E/AndroidRuntime(705):  at michelle.harris.yahztee4.Yahtzee4Activity.PlayGame(Yahtzee4Activity.java:28)
06-10 18:21:31.684: E/AndroidRuntime(705):  at michelle.harris.yahztee4.Yahtzee4Activity.onCreate(Yahtzee4Activity.java:22)
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-10 18:21:31.684: E/AndroidRuntime(705):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
06-10 18:21:31.684: E/AndroidRuntime(705):  ... 11 more
4

1 回答 1

2

You're doing nothing to the view itself. You are currently creating a new ImageView object, and assign the drawable to it, but you're not displaying it anywhere. Either in onCreate get your ImageView by findViewById(..) or in the onMyButtonClick you should be able to cast the View you're getting as parameter to ImageView and then change the drawable / resource depending on your "rndInt".

于 2012-06-10T16:37:21.277 回答