2013-01-03 46 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)); 
}*