2013-01-03 44 views
1

我呼籲ButtonList按鈕陣列創建如下介紹延遲。安卓:使用處理器不工作

LinearLayout player=(LinearLayout)findViewById(R.id.playerlayout); 
     PlayerFirst=(Button)player.getChildAt(0); 
     for(int i=0;i<player.getChildCount();i++) 
     { 
      ButtonList.add((Button)player.getChildAt(i)); 
     } 

我需要以順序遞增的那些按鈕的值(在每個變化之間的延遲) 我有以下代碼:

for(k=0;k<ButtonList.size();k++)   
{ 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     public void run() { 
      ButtonList.get(getK()).setText(getK()+1+""); 
     } 
    }, 1000); 
} 

這裏getK()是對於k存取爲了訪問k裏面的匿名函數。

public int k; 
public int getK() 
{ 
    return k; 
} 

我的應用程序崩潰了。我究竟做錯了什麼?

logcat的錯誤:

01-03 05:21:04.396: I/Process(1469): Sending signal. PID: 1469 SIG: 9 
01-03 05:21:06.276: E/Trace(1535): error opening trace file: No such file or directory (2) 
01-03 05:21:08.826: W/dalvikvm(1535): threadid=1: thread exiting with uncaught exception (group=0x2bd39930) 
01-03 05:21:08.846: E/AndroidRuntime(1535): FATAL EXCEPTION: main 
01-03 05:21:08.846: E/AndroidRuntime(1535): java.lang.IndexOutOfBoundsException: Invalid index 12, size is 12 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at java.util.ArrayList.get(ArrayList.java:304) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at com.example.awari.MainActivity$1.run(MainActivity.java:129) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at android.os.Handler.handleCallback(Handler.java:725) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at android.os.Looper.loop(Looper.java:137) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
01-03 05:21:08.846: E/AndroidRuntime(1535):  at dalvik.system.NativeStart.main(Native Method) 
+1

logcat的誤差Δθ –

+0

你能告訴我我應該從logcat發佈什麼信息嗎?我是新來的Android和沒有使用的logcat – user1488212

+0

@ user1488212:添加整個logcat的應用程序時,用的問題 –

回答

0

它沒有發生除了1000毫秒,因爲你告訴它與1000毫秒的延遲運行ButtonList.size()倍。如果從0ms開始,並假設在每次循環迭代之間1ms的計算時間,則更新將在1000ms,1001ms,1002ms等時發生。最好使用具有固定延遲的TimerTask

0

I have an array of buttons called ButtonList. I need to sequentially increment the values of those buttons.(with delays in between each change)

你只需要一個Handler和Runnable就可以做你想做的事。讓我們稍微重新安排您的代碼。

首先要handler一個字段變量。再經過初始化ButtonList電話:

handler.postDelayed(new Runnable() { 
    public void run() { 
     for(Button button : ButtonList) { 
      int count = Integer.parseInt(button.getText()); 
      button.setText(String.valueOf(count)); 
     } 
     handler.postDelayed(this, 1000); // Run this again in one second 
    } 
}, 1000); 

這將增加每個按鍵每一秒的值。

+0

運行你的代碼後,我仍然收到相同的logcat錯誤。我已經正確初始化了ButtonList。 – user1488212

+0

請在您的問題中發佈創建ButtonList的相關代碼。 – Sam

+0

更新的代碼 – user1488212

1

你的錯誤是因爲'get(getK())',當你找到下一個存取器時,我不知道你在做什麼,只是把這個條件放在FOR循環中。

沒有與處理程序沒有問題。

*if(getK() <= ButtonList.size()) { 
    ButtonList.get(getK()).setText(" "+(getK()+1)); 
}*