2013-02-12 349 views
0

兩天來我一直試圖讓setVisibility(View.INVISIBLE)函數正常工作。但是,如果我在模擬器中測試我的應用程序,它總是崩潰。怎麼了? (也:最新在onClickListener視圖arg0v之間的差)Android中的setVisibility(View.INVISIBLE)不起作用

public class SpielActivity extends Activity { 


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

    final Button startbutton = (Button)findViewById(R.id.anfangsbutton); 
    final TextView initCountdown = (TextView)findViewById(R.id.initcountdown); 

    startbutton.setVisibility(View.VISIBLE); 

    startbutton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      startbutton.setVisibility(View.INVISIBLE); 
      new CountDownTimer(3500, 1000) { 

       public void onTick(long millisUntilFinished) { 
        initCountdown.setText("" + millisUntilFinished/1000); 
       } 

       public void onFinish() { 
        initCountdown.setText(""); 
       } 
       }.start(); 



     } 
    }); 
    } 

} 

和這裏是logcat的數據:

02-12 14:18:30.147: W/dalvikvm(332): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
02-12 14:18:30.147: E/AndroidRuntime(332): FATAL EXCEPTION: main 
02-12 14:18:30.147: E/AndroidRuntime(332): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.JodomStudios.cloudgame/com.JodomStudios.cloudgame.SpielActivity}: java.lang.ClassCastException: android.widget.ImageButton 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.app.ActivityThread.access(ActivityThread.java:117) 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.os.Looper.loop(Looper.java:123) 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-12 14:18:30.147: E/AndroidRuntime(332): at java.lang.reflect.Method.invokeNative(Native Method) 
02-12 14:18:30.147: E/AndroidRuntime(332): at java.lang.reflect.Method.invoke(Method.java:507) 
02-12 14:18:30.147: E/AndroidRuntime(332): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-12 14:18:30.147: E/AndroidRuntime(332): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-12 14:18:30.147: E/AndroidRuntime(332): at dalvik.system.NativeStart.main(Native Method) 
02-12 14:18:30.147: E/AndroidRuntime(332): Caused by: java.lang.ClassCastException: android.widget.ImageButton 
02-12 14:18:30.147: E/AndroidRuntime(332): at com.JodomStudios.cloudgame.SpielActivity.onCreate(SpielActivity.java:19) 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-12 14:18:30.147: E/AndroidRuntime(332): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
02-12 14:18:30.147: E/AndroidRuntime(332): ... 11 more 

和這裏是XML佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearlayoutspiel" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/backgroundleiter" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/zeitzaehler" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="@string/countdown" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <Button 
     android:id="@+id/menubutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:text="@string/menu" /> 

    <Button 
     android:id="@+id/contbutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:text="@string/cont" /> 

    <ImageButton 
     android:id="@+id/pausebutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="#00000000" 
     android:src="@drawable/closebutton" /> 

    <TextView 
     android:id="@+id/initcountdown" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="@string/initcountdown" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textSize="40sp" /> 

    <ImageButton 
     android:id="@+id/retrybutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_toLeftOf="@+id/pausebutton" 
     android:background="#00000000" 
     android:src="@drawable/zeichnung" /> 

    <Button 
     android:id="@+id/anfangsbutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/menubutton" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="18dp" 
     android:text="@string/startgame" /> 

</RelativeLayout> 
+3

從'Logcat'中添加您的例外數據。 – Shaiful 2013-02-12 14:36:24

+0

你能分享你的xml佈局嗎? – fiddler 2013-02-12 14:38:24

回答

0

我認爲你的應用程序也可能崩潰,因爲你不是從UI線程更新UI。您使用計時器並且它在單獨的線程中運行。 嘗試包initCountdown.setText到後:

initCountdown.post(new Runnable() { 
public void run() { 
initCountdown.setText("" + millisUntilFinished/1000); 
} 
}); 
+0

非常感謝你,這是它! :) – 2013-02-12 14:49:56

+0

歡迎您:)檢查此http://developer.android.com/guide/components/processes-and-threads.html據我所知,這是常見的錯誤。 – Olsavage 2013-02-12 14:55:47

0

您的開始按鈕在佈局中定義爲ImageButton。你需要像這樣改變你的代碼:

final ImageButton startbutton = (ImageButton)findViewById(R.id.anfangsbutton); 
+0

謝謝,但沒有解決問題... – 2013-02-12 14:46:17

1

您正在使用啓動按鈕作爲按鈕,並定義了ImageButton的在XML.Please讓他們一樣。

1

從日誌:

02-12 14:18:30.147: E/AndroidRuntime(332): Caused by: java.lang.ClassCastException: android.widget.ImageButton 

看來,按鈕使用的是

final Button startbutton = (Button)findViewById(R.id.anfangsbutton); 

不是按鈕,因此一個ClassCastException檢索。請驗證您的佈局xml並使用正確的演員表。

希望這會有所幫助。

相關問題