如何每 5 秒在值之间切换 TextView
Posted
技术标签:
【中文标题】如何每 5 秒在值之间切换 TextView【英文标题】:How to switch TextView between values every 5 seconds 【发布时间】:2019-10-13 21:59:22 【问题描述】:我不知道使用 Threads 是否是我想要达到的目标,因此请随时根据需要修改代码。
我正在尝试在我的应用程序中实现一个功能,其中TextView
切换到 1 值,然后每 5 秒恢复到初始值。我在一个线程上实现了以下使用:
layoutDate.setText(firstNumber);
Thread numberSwitch = new Thread()
@Override
public void run()
while(!isInterrupted())
try
Thread.sleep(5000);
runOnUiThread(new Runnable ()
@Override
public void run()
layoutDate.setText(secondNumber);
);
catch (InterruptedException e)
e.printStackTrace();
;
numberSwitch.start();
我尝试在runUiOnThread
之后以及嵌套的run
之后添加layoutDate.setText(firstNumber)
,但它仍然无法按我的意愿工作。
我想实现以下目标:
【问题讨论】:
改用处理程序 当前状态下的代码在做什么? @RicardoA。所以onCreate
设置为layoutDate.setText(firstNumber)
,然后在5 秒后设置layoutDate.setText(secondNumber)
。问题是它不会恢复到第一个数字,无论我在线程中添加layoutDate.setText(firstNumber)
的位置
没听懂。它创建它并设置初始值,5 秒后设置第二个值。当你希望它恢复到第一个?再过 5 秒?
@RicardoA。是的——就是这样。 1. onCreate 设置 firstValue 2. 等待 5 秒 3. 设置 secondValue 4. 等待 5 秒 5. setFirstValue
【参考方案1】:
验证字段中的当前数字并更改为另一个,您可以通过获取值layoutDate.getText().toString()
或使用新变量来存储值来做到这一点。
layoutDate.setText(firstNumber);
Thread numberSwitch = new Thread()
@Override
public void run()
while(!isInterrupted())
try
Thread.sleep(5000);
runOnUiThread(new Runnable ()
@Override
public void run()
if(currentNumber == firstNumber)
currentNumber = secondNumber;
else
currentNumber = firstNumber;
layoutDate.setText(currentNumber);
);
catch (InterruptedException e)
e.printStackTrace();
;
numberSwitch.start();
或者
if(layoutDate.getText().toString().equals(firstNumber+""))
layoutDate.set(secondNumber);
else
layoutDate.set(firstNumber);
【讨论】:
更好的方法是使用 lambdas 将可运行对象发布到 layoutDate 本身,而不是使用新的处理程序或新线程。这样,一旦视图失效,runnable 就会被清除。【参考方案2】:您可以将 Handler 与可运行对象一起使用。
private TextView textView;
private Handler handler;
在你的onCreate()
textView = findViewById(R.id.tv_bt_msg);
textView.setText("secondNumber");
handler = new Handler();
//Change the textview after 5 seconds
handler.postDelayed(runnable, 5000);
可运行以每 5 秒更改一次文本
private Runnable runnable = new Runnable()
@Override
public void run()
String currentString = textView.getText().toString();
if(currentString.equals("secondNumber"))
currentString = "firstNumber";
else
currentString = "secondNumber";
final String tempString = currentString;
runOnUiThread(new Runnable()
@Override
public void run()
textView.setText(tempString);
);
//Change the textview again after 5 seconds
handler.postDelayed(runnable, 5000);
;
使用它来移除回调
handler.removeCallbacks(runnable);
【讨论】:
这很好用@Arun。我对textView
的颜色有一点小问题。设置secondNumber
后,我已将颜色设置为更改。当使用上面的实现切换回firstNumber
时,是否可以将颜色恢复为原始颜色?
@Adam 每次更改文本时更改文本颜色。与textView.setText()
一起添加textView.setTextColor()
并为该文本设置所需的颜色。 Here 是一个答案,提供了在运行时更改文本颜色的各种选项。
完成。 :D 我刚刚在if else
中调用了textView.setTextColor()
。谢谢:)以上是关于如何每 5 秒在值之间切换 TextView的主要内容,如果未能解决你的问题,请参考以下文章