Android延迟文本

Android延迟文本,android,handler,delay,Android,Handler,Delay,我想将文本设置为25个按钮,但要在5秒钟后显示每个文本。我试过很多不同的方法。我尝试使用Thread.sleep(5000),但我的程序崩溃了。然后我试图创建一个处理程序,但它崩溃了。有人能告诉我为什么吗?或者有没有其他方法可以让我延迟文本: *注意:在我的代码中,我使用了findviewbyd方法,但为了简单和重复,我决定不在这里发布它——所以这不是问题所在 public class Game extends Activity { protected List<String> m

我想将文本设置为25个按钮,但要在5秒钟后显示每个文本。我试过很多不同的方法。我尝试使用Thread.sleep(5000),但我的程序崩溃了。然后我试图创建一个处理程序,但它崩溃了。有人能告诉我为什么吗?或者有没有其他方法可以让我延迟文本:

*注意:在我的代码中,我使用了findviewbyd方法,但为了简单和重复,我决定不在这里发布它——所以这不是问题所在

public class Game extends Activity {

protected List<String> my_list = new ArrayList<String>();
protected String letters[]; 
protected List<Button> button_list = new ArrayList<Button>();   
 Button b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, 
        b11, b12, b13, b14, b15, b16, b17, b18, b19, b20,
        b21, b22, b23, b24;

 Random rand = new Random();
 int random_counter;
 int my_list_counter = 25;
 int i;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game_activity);
    letters = new String[]{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
                           "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
                           "u", "v", "w", "x", "y"};
    Button[] bttn_arr = new Button[] {b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, 
            b11, b12, b13, b14, b15, b16, b17, b18, b19, b20,
            b21, b22, b23, b24};


    my_list.addAll(Arrays.asList(letters));

    button_list.addAll(Arrays.asList(bttn_arr));

    final Handler handler = new Handler();
    handler.post(new Runnable() {
        @Override
        public void run() {
            for (i=0; i<25; i++){
                random_counter = rand.nextInt(my_list_counter);
                button_list.get(i).setText(my_list.get(random_counter));
                my_list.remove(my_list.get(random_counter));
                my_list_counter--;
                handler.postDelayed(this, 5000);
            }
        }
    });
}   
公共类游戏扩展活动{
受保护列表my_List=new ArrayList();
受保护的字符串字母[];
受保护列表按钮_List=new ArrayList();
按钮b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,
b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,
b21、b22、b23、b24;
Random rand=新的Random();
int随机计数器;
int my_list_counter=25;
int i;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.game_活动);
字母=新字符串[]{“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”,
“k”、“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”,
“u”、“v”、“w”、“x”、“y”};
按钮[]bttn_arr=新按钮[]{b0、b1、b2、b3、b4、b5、b6、b7、b8、b9、b10,
b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,
b21,b22,b23,b24};
my_list.addAll(array.asList(字母));
按钮列表.addAll(数组.asList(bttn\u arr));
最终处理程序=新处理程序();
handler.post(新的Runnable(){
@凌驾
公开募捐{

对于(i=0;i使用这样的处理程序

for(int i=0;i<25;i++){
final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {

              //do something here

            }
        }, 5000);
 }

for(inti=0;i尝试调整此选项:

for (int i = 0; i < 20; i++) {
       final String message = "Hello" + i;
        Runnable x = new Runnable(){
            @Override
            public void run(){
                Log.i("Hello", message);

            }
        };

       Handler handler = new Handler();
       //Run the code in runnable x at increasing time intervals of 5 seconds
       handler.postAtTime(x, SystemClock.uptimeMillis() + i*5000);

    }

}
for(int i=0;i<20;i++){
最后一个字符串message=“Hello”+i;
Runnable x=新的Runnable(){
@凌驾
公开募捐{
Log.i(“你好”,消息);
}
};
Handler=newhandler();
//以5秒的递增时间间隔在runnable x中运行代码
handler.posttime(x,SystemClock.uptimeMillis()+i*5000);
}
}


此代码将每5秒打印一次“hello”+i(例如,hello1、hello2、hello3等)。如果您使代码适应此情况,它将每5秒运行一次。在前一个实例中,处理程序一次发布并运行所有可运行程序,现在它一次发布所有可运行程序,但每个可运行程序的启动时间增加了5秒(参见handler.posttime(…)。希望这有帮助!

永远不要在UI线程中使用Thread.sleep。处理程序才是最好的选择。如果您的程序崩溃,请检查控制台中出现的异常,可能是空指针异常或类似的异常。顺便说一句,您正在为同一可运行线程同时安排25个调用,小心,这可能会增长Tiallythank感谢您的建议。我仍在努力解决问题。我正在实现Kaylwin的答案,但正如我在下面发布的那样,似乎仍然存在错误。在稍微更改Kaylwin的代码后,程序等待5秒钟,然后显示所有文本。它不会每5秒钟显示一次文本…我使用了您的代码,但似乎出现了错误r、 我现在正在调试,看看是否能找到答案。在进入run方法之前,它会运行循环25次。5秒后,它会显示所有文本。它不会一个接一个地显示。嗯……有什么想法吗?@user2456977我误解了你的问题,所以我更改了答案,让它们一个接一个地显示。