android set visibility of a button on timer
Solution 1
The problem is that you're not in the UI thread when you call okButton.setVisibility(View.VISIBLE);
, since you create and run your own thread. What you have to do is get your button's handler and set the visibility through the UI thread that you get via the handler.
So instead of
okButton.setVisibility(View.VISIBLE)
you should do
okButton.getHandler().post(new Runnable() {
public void run() {
okButton.setVisibility(View.VISIBLE);
}
});
Solution 2
I found this to be a much simpler solution. Visibility on 7 second delay
continuebutton.setVisibility(View.INVISIBLE);
continuebutton.postDelayed(new Runnable() {
public void run() {
continuebutton.setVisibility(View.VISIBLE);
}
}, 7000);
Solution 3
I found this a Better solution to the problem (button id = but_resend)
define handler
private Handler handler;
call function in extend class
showButtons();
define after class
private void showButtons() {
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
((Button) findViewById(R.id.but_resend)).setVisibility(View.VISIBLE);
}
}, 20000); // produce 20 sec delay in button visibility
}
and keep in mind to hide the visibility in the.xml file by
android:visibility="invisible"
steve
Updated on June 09, 2020Comments
-
steve almost 4 years
I have an app that shows a disclaimer at the beginning of the program. I want a button to remain invisible for a set amount of time, and then become visible. I set up a thread that sleeps for 5 seconds, and then tries to make the button visible. However ,I get this error when I execute my code:
08-02 21:34:07.868: ERROR/AndroidRuntime(1401): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
How can I count 5 seconds, and then make the button visible? 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); }
-
Tushar Pandey over 10 yearsCan we find something like , particular View Section of ListView is Visible from 3 ( any instance of time ) seconds .
-
Sonhja about 9 yearsWow, no problem with this one!
-
iBEK over 6 yearsStill works fine in 2017, need to delay closing of my listView in searchView to make the softInPutMode close first and then listView afterwords. It's a great workaround for the jumping view in ConstraintLayout with rising and closing of softInputMode.
-
Kartik Arora almost 6 yearsThankyou bro, that was extremely helpful.