我想以5秒的间隔更改TextView的字符串。所以我写道:
Intent intent = getIntent();
int kutisu = Integer.parseInt(intent.getStringExtra("kutisu"));// the number of times
int max = Integer.parseInt(intent.getStringExtra("max"));
int speed = 5000;// 5 seconds
int[] sum=new int[kutisu]; // After finished count, I want to ask for a total
int answer = 0;
for(int i=0;i<=kutisu;i++){
sum[i]=new java.util.Random().nextInt(max);
tv.setText(sum[i]); //tv is a TextView
try {
Thread.sleep(speed); // stop
} catch (InterruptedException e) {
e.printStackTrace();
}
}
但是运行它时字符串没有改变。如何每5秒更改一次TextView的字符串?
答案 0 :(得分:2)
使用timerTask
public void startTimer() {
//set a new Timer
timer = new Timer();
//initialize the TimerTask's job --> change yourView text data
initializeTimerTask();
//schedule the timer, after the first 5000ms the TimerTask will run every 10000ms
timer.schedule(timerTask, 5000, 10000); //
}
你也可以使用postDelayed
,让它以5秒的间隔连续运行,你需要再次在Run方法中将postDelayed
作为嵌套召唤
handler.postDelayed(new Runnable() {
public void run() {
Log.d("MyActivity", "Ding Ding");
// --> change yourView text data
//calling postdelayed again
handler.postDelayed(this, 5000); //added this line
}
}, 5000);
答案 1 :(得分:1)
复制以下课程
public class UIUpdater {
// Create a Handler that uses the Main Looper to run in
private Handler mHandler = new Handler(Looper.getMainLooper());
private Runnable mStatusChecker;
private int UPDATE_INTERVAL = 5*1000; //5 seconds
/**
* Creates an UIUpdater object, that can be used to
* perform UIUpdates on a specified time interval.
*
* @param uiUpdater A runnable containing the update routine.
*/
public UIUpdater(final Runnable uiUpdater) {
mStatusChecker = new Runnable() {
@Override
public void run() {
// Run the passed runnable
uiUpdater.run();
// Re-run it after the update interval
mHandler.postDelayed(this, UPDATE_INTERVAL);
}
};
}
/**
* The same as the default constructor, but specifying the
* intended update interval.
*
* @param uiUpdater A runnable containing the update routine.
* @param interval The interval over which the routine
* should run (milliseconds).
*/
public UIUpdater(Runnable uiUpdater, int interval){
this(uiUpdater);
UPDATE_INTERVAL = interval;
}
/**
* Starts the periodical update routine (mStatusChecker
* adds the callback to the handler).
*/
public synchronized void startUpdates(){
mStatusChecker.run();
}
/**
* Stops the periodical update routine from running,
* by removing the callback.
*/
public synchronized void stopUpdates(){
mHandler.removeCallbacks(mStatusChecker);
}
}
请注意,在上面的类变量UPDATE_INTERVAL
中确定更新的时间间隔,请根据需要进行更改。
然后在你的活动或片段中
UIUpdater mUIUpdater = new UIUpdater(new Runnable() {
@Override
public void run() {
//do what ever you want to do with your textview
}
});
并在onResume
@Override
public void onResume() {
super.onResume();
mUIUpdater.startUpdates();
}
并在onPause
@Override
public void onPause() {
super.onPause();
mUIUpdater.stopUpdates();
}
答案 2 :(得分:0)
Handler handler = new Handler();
private Runnable myRunnable=new Runnable(){
public void run(){
//Do what you want to your textView here
handler.postDelayed(this, 5000);
}
};
答案 3 :(得分:0)
您可以在同一个地方使用2个TextView
private void startFirstFadeOut() {
Animation animation = new AlphaAnimation(1f, 0f);
animation.setDuration(ANIMATION_DURATION);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
firstTextView.setVisibility(INVISIBLE);
startSecondFadeIn();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
firstTextView.setAnimation(animation);
firstTextView.animate();
}
private void startSecondFadeIn() {
Animation animation = new AlphaAnimation(0f, 1f);
animation.setDuration(ANIMATION_DURATION);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
secondTextView.setVisibility(VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation) {
startSecondFadingOut();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
secondTextView.setAnimation(animation);
secondTextView.animate();
}
private void startSecondFadingOut() {
Animation animation = new AlphaAnimation(1f, 0f);
animation.setDuration(ANIMATION_DURATION);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
secondTextView.setVisibility(INVISIBLE);
startFirstFadingIn();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
secondTextView.setAnimation(animation);
secondTextView.animate();
}
private void startFirstFadingIn() {
Animation animation = new AlphaAnimation(0f, 1f);
animation.setDuration(ANIMATION_DURATION);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
firstTextView.setVisibility(VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation) {
startFirstFadeOut();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
firstTextView.setAnimation(animation);
firstTextView.animate();
}
只需致电startFirstFadeOut
,一切都将自动生效
答案 4 :(得分:0)
我使用这种方式:
from itertools import groupby
[next(v) for k,v in groupby(test)]
# [['B', [4, 5, 6]], ['C', [7, 8, 9]]]