【问题标题】:Foreach String[] with timer in AndroidAndroid 中带计时器的 Foreach String[]
【发布时间】:2013-04-09 19:21:03
【问题描述】:

我在 android 的 foreach/for 循环中实现了一个计时器。有一个 TextFieldTextView(我不知道该使用哪个)每 30 毫秒填充一次字符串数组中的下一个字符串:

String[] faces = retrieve_pattern().split("\"");

我需要帮助来实现这个。

编辑: 鲍里斯,你的例子有效,但它打印出所有的字符串,但我只需要显示一个字符串,并在“一段时间”删除它并显示下一个,直到我到达结尾。 TextField 中的一种文本动画。

我已经尝试过 TimerTask,但无法让它工作。

【问题讨论】:

  • 那么你想实现一个例程,每 30ms 向 TextView 添加一个元素,直到所有元素都添加完?
  • 你不会这样做。使用TimerTaskScheduledThreadPoolExecutor
  • 将 Timer 与 TimerTask 结合使用。使用 schedule 方法,延迟为 0ms,重复为 30ms。 docs.oracle.com/javase/6/docs/api/java/util/Timer.html
  • 是在时钟上每 30 分钟一次,还是在应用程序打开后每 30 分钟连续一次?
  • Timer 和 TimerTask 是 Java 一直存在的一个坏习惯。在为 Android 编程时使用 getHandler().post(Runnable) 更好。

标签: java android loops android-intent timer


【解决方案1】:

我认为最合适的方法是使用Handler

public class MyActivity extends Activity {
   private String [] mSplits;
   private int mSplitIndex;
   private Handler updater = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      TextView textView = (TextView)MyActivity.this.findViewById(R.id.text_view);
      String text = mSplits[mSplitIndex++];
      textView.setText(text);
      if (mSplitIndex < mSplits.length) {
        sendEmptyMessageDelayed(0, 30);
      }
    }
   };
   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test_split);
    updater.sendEmptyMessageDelayed(0, 0));
   }
}

我是用心写的,所以如果您遇到任何问题,请回信。

【讨论】:

  • 谢谢鲍里斯,我尝试听从您的建议,现在收到以下错误,请查看添加的错误编辑。
  • @Jake:你真的在你的TextView 上做setText 吗?如果是这样,新的刺应该取代旧的。
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2013-01-26
  • 2014-03-04
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多