2017-04-24 68 views
0

我正在製作一個android應用程序,最初用戶可以看到「GO」按鈕。單擊按鈕時,將顯示一個新的相對佈局,其中有幾個選項按鈕,即「添加」和「減法」。 然後,我嘗試獲取用戶點擊哪個按鈕,並相應地呈現該組問題。 但是,一旦該GO按鈕被點擊應用程序崩潰.. 我的代碼檢查哪個按鈕是點擊---在android中找到一個按鈕「tag」

public void start(View view) 
    { 
     startbutton.setVisibility(View.INVISIBLE); 
     Log.i("YO:", "Start button ok!"); 
     optionRelativeLayout.setVisibility(RelativeLayout.VISIBLE); 
     int tag = (Integer) view.getTag(); 
     if(tag==4) 
      additionrelativelayout.setVisibility(RelativeLayout.VISIBLE); 
     if(tag==5) 
      subtractionrelativelayout.setVisibility(RelativeLayout.VISIBLE); 
    } 

的XML代碼是

<Button 
     android:text="Go!" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/start_button" 
     android:textSize="80sp" 
     android:paddingBottom="50dp" 
     android:paddingEnd="50dp" 
     android:paddingLeft="50dp" 
     android:paddingRight="50dp" 
     android:paddingStart="50dp" 
     android:paddingTop="50dp" 
     android:background="@android:color/holo_green_light" 
     android:onClick="start" 
     android:visibility="visible" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/optionrelativlayout" 
     android:visibility="visible"> 

     <Button 
      android:text="Addition" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:tag="4 " 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="45dp" 
      android:id="@+id/addition" /> 

     <Button 
      android:text="Button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:tag="5" 
      android:layout_centerHorizontal="true" 
      android:id="@+id/subtraction" 
      android:layout_marginTop="150dp" /> 

    </RelativeLayout> 

的錯誤是

04-24 22:21:39.525 10853-10853/com.example.rohit_136.brain_trainer I/YO:: Start button ok! 
04-24 22:21:39.527 10853-10853/com.example.rohit_136.brain_trainer E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.example.rohit_136.brain_trainer, PID: 10853 
                        java.lang.IllegalStateException: Could not execute method for android:onClick 
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
                         at android.view.View.performClick(View.java:5226) 
                         at android.view.View$PerformClick.run(View.java:21350) 
                         at android.os.Handler.handleCallback(Handler.java:739) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:148) 
                         at android.app.ActivityThread.main(ActivityThread.java:5582) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                         Caused by: java.lang.reflect.InvocationTargetException 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                         at android.view.View.performClick(View.java:5226)  
                         at android.view.View$PerformClick.run(View.java:21350)  
                         at android.os.Handler.handleCallback(Handler.java:739)  
                         at android.os.Handler.dispatchMessage(Handler.java:95)  
                         at android.os.Looper.loop(Looper.java:148)  
                         at android.app.ActivityThread.main(ActivityThread.java:5582)  
                         at java.lang.reflect.Method.invoke(Native Method)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
                         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference 
                         at com.example.rohit_136.brain_trainer.MainActivity.start(MainActivity.java:177) 
                         at java.lang.reflect.Method.invoke(Native Method)  
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
                         at android.view.View.performClick(View.java:5226)  
                         at android.view.View$PerformClick.run(View.java:21350)  
                         at android.os.Handler.handleCallback(Handler.java:739)  
                         at android.os.Handler.dispatchMessage(Handler.java:95)  
                         at android.os.Looper.loop(Looper.java:148)  
                         at android.app.ActivityThread.main(ActivityThread.java:5582)  
                         at java.lang.reflect.Method.invoke(Native Method)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
04-24 22:21:39.535 10853-10865/com.example.rohit_136.brain_trainer I/ActivityThreadEui: schedulePauseActivity com.example.rohit_136.brain_trainer.MainActivity finished=true userLeaving=false configChanges=0 dontReport=false 
04-24 22:21:41.098 10853-10853/com.example.rohit_136.brain_trainer I/Process: Sending signal. PID: 10853 SIG: 9 
+0

您的描述不符在'xml'東西是什麼'GO'?發佈你的堆棧跟蹤,否則我們無法猜測出錯的地方。 – Pztar

+0

更新錯誤日誌! – Rohit

回答

1

爲什麼不使用這些按鈕已有的ID?

public void start(View view) 
    { 
     startbutton.setVisibility(View.INVISIBLE); 
     Log.i("YO:", "Start button ok!"); 
     optionRelativeLayout.setVisibility(RelativeLayout.VISIBLE); 
     int id = view.getId(); 
     if(id==R.id.addition) 
      additionrelativelayout.setVisibility(RelativeLayout.VISIBLE); 
     if(id==R.id.subtraction) 
      subtractionrelativelayout.setVisibility(RelativeLayout.VISIBLE); 
    } 
+0

但後來不會view.getId()讓我的視圖,我傳遞給該函數的Id。這不是我想要的。我想點擊它的按鈕是Id。 – Rohit

2

- 編輯 -

我想我不明白正確的是你所想要的目的。

1 - 在您的start()方法,刪除此:

int tag = (Integer) view.getTag(); 
    if(tag==4) 
     additionrelativelayout.setVisibility(RelativeLayout.VISIBLE); 
    if(tag==5) 
     subtractionrelativelayout.setVisibility(RelativeLayout.VISIBLE); 

2 - 創建兩個新的方法,並把能見度線內,這樣的:

public void displayAddition(View view){ 
    additionrelativelayout.setVisibility(RelativeLayout.VISIBLE); 
} 

public void displaySubtraction(View view){ 
    subtractionrelativelayout.setVisibility(RelativeLayout.VISIBLE); 
} 

3 - 在你的XML,將它們添加到按鈕中:

addition按鈕中添加以下行: android:onClick="displayAddition"

subtraction按鈕添加以下行: android:onClick="displaySubtraction"

+0

這不是我想要做的。我真正想要的就是這樣 - 用戶點擊「GO」按鈕(id-start_button),然後Go按鈕消失,顯示一個新的相對佈局,它具有加法和減法按鈕,當用戶在這些按鈕上碰撞時,我想獲取該按鈕的標籤。 – Rohit

+0

@Rohit我編輯了我的答案 – mVck

相關問題