2013-02-01 115 views
1


今天我的问题是关于线程,在Android的活动,我想显示一条消息,图标一个对话框,标题和三个按钮(正面,负面和中性),我已经做到了,没有任何错误(加上听众和一切),我执行正常,并再次没有错误,问题是这样的:Android的线程问题(线程在后台运行)

alert.setPositiveButton("Yes", new android.content.DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface i, int j) 
     { 

      pb.setVisibility(0); //pb is a progress bar 
      new Thread (new Runnable() 
      { 
       public void run() 
       { 
        try { 
         tv.setText("Saved!"); 
         Thread.sleep(5000); 
         tv.setText(null); //tv is a text view 
         Thread.sleep(5000); 
         finish(); 

        } catch (InterruptedException e) { 
         alerttmp.setIcon(R.drawable.ic_launcher); 
         alerttmp.setTitle("Error"); 
         alerttmp.setMessage("Thread could not be executed Thread id: 100390"); 
         alerttmp.show(); 
        } 

       } 
      }).run(); 
     } 
    }); 

见,突出显示正的按钮并保持高亮显示,直到活动关闭,同时我希望对话框消失时,按钮显示,电视有文字“保存!!”在其中,然后没有文字,并最终杀死该活动。

SOS的家伙!谢谢!

ps:英语不是我的母语,所以没有莎士比亚的话请! :)请让语言尽可能简单!谢谢!

+0

我也跑它的UIThread,没有工作,直到我选择它可能仍然没有工作 –

回答

1

问题是你不在UI线程中做你的UI东西。

您需要将可运行对象发布到UI处理程序,而不仅仅为此生成一个新线程。

您可以使用new Handler().postDelayed(Runnable runnable, long millis)来完成。 当然,这必须从UI线程运行 - 而不是从任何其他生成的线程运行。

+0

如何使用一个答案?谢谢 ! –

+0

我把那个处理程序中的我的Runnable与5000作为一个毫秒,但没有工作 –

+0

尽管对话框现在没有了,但电视文本并没有改变,它只是等待大约10秒钟,然后退出pb正在运行)现在我需要的只是让电视的文本更改两次 –

0

管理使用两个处理程序,这里是代码: 注意:我仍然需要知道更多关于处理程序和postDelayed方法,所以评论将帮助,并将肯定会感激别人我会谷歌它达(要做到这一点无论如何)

alert.setPositiveButton("Yes", new android.content.DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface i, int j) 
     { 
      pb.setVisibility(0); 
      tv.setText("Saved!"); 
    new Handler().postDelayed(new Runnable() { 
       public void run() { 
        tv.setText(null); 
     }}, 5000); 
    new Handler().postDelayed(new Runnable() { 
     public void run() { 
      finish(); 
}}, 5000); 
     }}); 
+0

根据你的问题,看起来像你想finish()被称为5秒在删除文本之后 - 在这种情况下,您需要从第一个可运行内部发布第二个可运行内容。 (或者:如果您的时间精确,只需将第二延迟更改为10秒)。 – SirKnigget