Reputation: 57
As you can see, I have to do TASK1 and continually TASK2. Between 1 and 2, they have delay. And then I want to repeat it infinitely till activity will be finished.
I have no experience for thread.. I can't fix this error. Help ME!
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//TASK 1
main_1.setVisibility(View.VISIBLE);
main_2.setVisibility(View.INVISIBLE);
main_1.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//TASK 2
main_1.setVisibility(View.INVISIBLE);
main_2.setVisibility(View.VISIBLE);
main_2.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
}
}, 1000);
}
}, 1000, 1000);
And it's my error
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Upvotes: 1
Views: 59
Reputation:
Timer runs on background thread. You can not update ui
from background thread, so always use runOnUiThread
for that purpose.
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
YourActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
main_1.setVisibility(View.VISIBLE);
main_2.setVisibility(View.INVISIBLE);
main_1.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
}
});
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//TASK 2
main_1.setVisibility(View.INVISIBLE);
main_2.setVisibility(View.VISIBLE);
main_2.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
}
}, 1000);
}
}, 1000, 1000);
Upvotes: 0
Reputation: 6251
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//TASK 1
YourActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
main_1.setVisibility(View.VISIBLE);
main_2.setVisibility(View.INVISIBLE);
main_1.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
}
});
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//TASK 2
YourActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
main_1.setVisibility(View.INVISIBLE);
main_2.setVisibility(View.VISIBLE);
main_2.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
}
});
}
}, 1000);
}
}, 1000, 1000);
Upvotes: 1