2010-08-02 26 views
12

Tôi có một ứng dụng hiển thị tuyên bố từ chối trách nhiệm ở đầu chương trình. Tôi muốn một nút vẫn ẩn trong một khoảng thời gian nhất định và sau đó hiển thị. Tôi thiết lập một chuỗi ngủ trong 5 giây và sau đó cố gắng hiển thị nút. Tuy nhiên, tôi nhận được lỗi này khi tôi thực thi mã của mình:khả năng hiển thị bộ android của một nút trên bộ hẹn giờ

08-02 21: 34: 07.868: ERROR/AndroidRuntime (1401): android.view.ViewRoot $ CalledFromWrongThreadException: Chỉ chuỗi ban đầu đã tạo phân cấp chế độ xem mới có thể chạm vào các chế độ xem của nó.

Làm cách nào để đếm 5 giây và sau đó làm cho nút hiển thị? THanks.

Thread splashTread = new Thread() { 
      @Override 
      public void run() { 
      try { 
        int waited = 0; 
        while(_active && (!_ok2)) { 
         sleep(100); 
         if(_active) { 
          waited += 100; 
          if(waited >= _splashTime) 
          { 
          turnButtonOn(); 
          } 

         } 
        } 
       } catch(InterruptedException e) { 
        // do nothing 
       } finally { 
        finish(); 
        startActivity(new Intent("com.lba.mixer.Choose")); 

       } 
    }; 
    splashTread.start(); 


     public static void turnButtonOn() { 
     okButton.setVisibility(View.VISIBLE); 
     } 

Trả lời

53

Sự cố là bạn không ở trong chuỗi giao diện người dùng khi bạn gọi okButton.setVisibility(View.VISIBLE);, vì bạn tạo và chạy chuỗi của riêng mình. Những gì bạn phải làm là lấy trình xử lý nút của bạn và đặt chế độ hiển thị thông qua chuỗi giao diện người dùng mà bạn nhận được thông qua trình xử lý.

Vì vậy, thay vì

okButton.setVisibility(View.VISIBLE) 

bạn nên làm

okButton.getHandler().post(new Runnable() { 
    public void run() { 
     okButton.setVisibility(View.VISIBLE); 
    } 
}); 
+0

Chúng ta có thể tìm thấy điều gì đó như, Phần xem cụ thể của ListView hiển thị từ 3 (bất kỳ trường hợp nào) giây. –

+0

cảm ơn người đàn ông bạn tiết kiệm thời gian của tôi .. :) –

22

Tôi thấy điều này là một giải pháp đơn giản hơn nhiều. Khả năng hiển thị trên độ trễ 7 giây

continuebutton.setVisibility(View.INVISIBLE); 
continuebutton.postDelayed(new Runnable() { 
     public void run() { 
      continuebutton.setVisibility(View.VISIBLE); 
     } 
    }, 7000); 
+0

hoạt động như ma thuật .... Thanx – Richa

+0

Đồng ý, đây là một giải pháp kỳ diệu. Cám ơn vì đã chia sẻ. – Andy

+0

Chà, không vấn đề gì với cái này! – Sonhja

Các vấn đề liên quan