2015-10-31 87 views
-2

我是讓按鈕組偵聽這樣的,但是當按鈕點擊應用程序被強制關閉,我不知道什麼是錯我的代碼,請檢查了這一點應用被強制關閉按鈕時按下

這是我的應用程序的項目

公共類菜單的全部代碼擴展活動{

 static String KEY_ANIM = "TARGET_ANIM"; 
    static String Target_Move = "Move"; 
    static String Target_Alpha = "Alpha"; 
    String target_op = Target_Move; 

    Button button1, button2, button3, button4, button5, button6, button7, button8, button9, button10, button11, button12; 
    Animation animFadein, animFadeout, animFadeout1, animFadeout2, animFadeout3; 
    OnClickListener listener1, listener2, listener3; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.menu); 

     animFadeout = AnimationUtils.loadAnimation(this, R.animator.fadeout); 
     animFadeout1 = AnimationUtils.loadAnimation(this, R.animator.fadeout); 
     animFadeout2 = AnimationUtils.loadAnimation(this, R.animator.fadeout); 
     animFadeout3 = AnimationUtils.loadAnimation(this, R.animator.fadeout); 
     animFadein = AnimationUtils.loadAnimation(this, R.animator.fadein); 

     button1= (Button)findViewById(R.id.aa1);    
     button2= (Button)findViewById(R.id.aa2);  
     button3= (Button)findViewById(R.id.aa3);    
     button4= (Button)findViewById(R.id.aa4);      
     button5= (Button)findViewById(R.id.aa5);   
     button6= (Button)findViewById(R.id.aa6);    
     button7= (Button)findViewById(R.id.aa7);    
     button8=(Button)findViewById(R.id.aa8);     
     button9= (Button)findViewById(R.id.aa9);  
     button10= (Button)findViewById(R.id.aa10);   
     button11= (Button)findViewById(R.id.aa11);   
     button12= (Button)findViewById(R.id.aa12); 



      listener1 = new OnClickListener() { 
       @Override 
       public void onClick(View one) { 
        target_op = Target_Alpha; 

        if(one==button1|| one==button2|| one==button3|| one==button4){ 

         ((View) listener1).startAnimation(animFadeout1);     

        }         
       } 
      }; 

    button1.setOnClickListener(listener1); 
    button2.setOnClickListener(listener1); 
    button3.setOnClickListener(listener1); 
    button4.setOnClickListener(listener1); 

        listener2 = new OnClickListener() { 
         @Override 
         public void onClick(View two) { 
          target_op = Target_Alpha; 

          ((View) listener2).startAnimation(animFadeout); 

          if(two==button5|| two==button6|| two==button7|| two==button8){ 

           Intent intent = new Intent(Amenu.this, bachievements.class); 
           intent.putExtra(KEY_ANIM, target_op); 
           startActivity(intent); 
          } 
         }              
       }; 

    button5.setOnClickListener(listener2); 
    button6.setOnClickListener(listener2); 
    button7.setOnClickListener(listener2); 
    button8.setOnClickListener(listener2); 

        listener3 = new OnClickListener() { 
         @Override 
         public void onClick(View three) { 
          target_op = Target_Alpha; 

          ((View) listener3).startAnimation(animFadeout); 

          if(three==button9|| three==button10|| three==button11|| three==button12){ 

          } 
         } 

       }; 



    button9.setOnClickListener(listener2); 
    button10.setOnClickListener(listener2); 
    button11.setOnClickListener(listener2); 
    button12.setOnClickListener(listener2); 

       animFadeout1.setAnimationListener(new AnimationListener() { 

        @Override 
        public void onAnimationStart(Animation animation) { 
         // TODO Auto-generated method stub 
        } 

        @Override 
        public void onAnimationRepeat(Animation animation) { 
         // TODO Auto-generated method stub 
        } 

        @Override 
        public void onAnimationEnd(Animation animation) { 
         // TODO Auto-generated method stub 
          ((View) listener2).startAnimation(animFadeout2); 
        } 
       }); 


      animFadeout2.setAnimationListener(new AnimationListener() { 

       @Override 
       public void onAnimationStart(Animation animation) { 
        // TODO Auto-generated method stub 
       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { 
        // TODO Auto-generated method stub 
       } 

       @Override 
       public void onAnimationEnd(Animation animation) { 
        // TODO Auto-generated method stub 
         ((View) listener2).startAnimation(animFadeout3); 
       } 
      }); 


      animFadeout3.setAnimationListener(new AnimationListener() { 

       @Override 
       public void onAnimationStart(Animation animation) { 
        // TODO Auto-generated method stub 
       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { 
        // TODO Auto-generated method stub 
       } 

       @Override 
       public void onAnimationEnd(Animation animation) { 
        // TODO Auto-generated method stub 

          Intent intent = new Intent(menu.this, play.class); 
          intent.putExtra(KEY_ANIM, target_op); 
          startActivity(intent); 
          menu.this.finish(); 


       } 
      }); 

我被放在動畫在那裏,所以當listener1按鈕組點擊它會顯示淡出動畫時再listener1動畫結束LISTENER2動漫秀聽衆等等3

,這是從logcat的

10-31 22:53:57.375: E/AndroidRuntime(642): FATAL EXCEPTION: main 
10-31 22:53:57.375: E/AndroidRuntime(642): java.lang.ClassCastException: com.mira.canyoutapit.Amenu$2 cannot be cast to android.view.View 
10-31 22:53:57.375: E/AndroidRuntime(642): at com.mira.canyoutapit.Amenu$2.onClick(Amenu.java:93) 
10-31 22:53:57.375: E/AndroidRuntime(642): at android.view.View.performClick(View.java:4084) 
10-31 22:53:57.375: E/AndroidRuntime(642): at android.view.View$PerformClick.run(View.java:16966) 
10-31 22:53:57.375: E/AndroidRuntime(642): at android.os.Handler.handleCallback(Handler.java:615) 
10-31 22:53:57.375: E/AndroidRuntime(642): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-31 22:53:57.375: E/AndroidRuntime(642): at android.os.Looper.loop(Looper.java:137) 
10-31 22:53:57.375: E/AndroidRuntime(642): at android.app.ActivityThread.main(ActivityThread.java:4745) 
10-31 22:53:57.375: E/AndroidRuntime(642): at java.lang.reflect.Method.invokeNative(Native Method) 
10-31 22:53:57.375: E/AndroidRuntime(642): at java.lang.reflect.Method.invoke(Method.java:511) 
10-31 22:53:57.375: E/AndroidRuntime(642): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
10-31 22:53:57.375: E/AndroidRuntime(642): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-31 22:53:57.375: E/AndroidRuntime(642): at dalvik.system.NativeStart.main(Native Method) 

對不起,如果有我的代碼,因爲我是問在這裏糾正我的代碼,由於錯誤提前

+0

使用LogCat檢查與您的崩潰相關的Java堆棧跟蹤:https://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this – CommonsWare

+0

爲什麼所有按鈕有相同的ID,爲什麼不使用一個偵聽器和switch子句? –

+1

爲什麼試圖將onClickListener投射到View? – Mike

回答

1

你投onClickListenner更改爲View,並嘗試導致錯誤的startAnimation

應該調用它的觀點:

view.startAnimation(animFadeout1); 

與您的代碼的其他問題:

既然你與所有這些按鈕的工作會更容易些,使活動implments OnClickListener

public class menu extends Activity implements View.OnClickListener{...} 

所有的按鈕都使用相同的ID,所以它會表現sa我爲所有按鈕。

您需要使用不同的ID,並讓他們使用相同的監聽器:

button1= (Button)findViewById(R.id.button_one); 
button1.setOnClickListener(this);   
button2= (Button)findViewById(R.id.button_two); 
button2.setOnClickListener(this); 

然後使用一個開關的情況下提供基於按鈕標識不同的邏輯。

@Override 
    public void onClick(View view) { 
     //To identify the correct widget, use the getId() method on the view argument 
     int id = view.getId(); 
     switch (id) { 
      case R.id.button_one: 
       //viewOne clicked 
       break; 
      case R.id.button_two: 
       //And so on... 
     } 
    } 

你爲例如多個按鈕的情況下:

case R.id.button_one, R.id.button_two , R.id.button_three, R.id.button_four: 

而且你的動畫是多餘的,良好的編碼習慣要你避免重複。

+0

所以我可以把4個按鈕放入1個案例?然後我可以使用所有的按鈕在這種情況下啓動動畫? – Ricci

+0

@Archanister是先生 – meda