我对 Android 编程很陌生,所以请原谅我的新手。我正在尝试创建一个非常简单的活动,该活动将在布局中间有一个 TextView,并且每隔几秒切换到不同的文本。例如,TextView 会说“text1”,暂停几秒钟,然后说“text2,然后再次暂停。最终,我想添加更多文本并让它们依次循环。我知道这看起来像是一个超级简单的事情,但我现在主要是想了解线程和处理程序。无论如何,我已经阅读了如何将冗长的内容远离 UI 线程以防止错误,所以我想我应该使用处理程序简单地在屏幕上的两个文本之间切换。不幸的是,我无法让它工作。下面是一些代码:
public class MainActivity extends Activity {
String[] myarray = {"text1" , "text2"};
int arraylength = myarray.length;
int count;
Handler handler = new Handler();
TextView mytexts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mytexts = (TextView)findViewById(R.id.my_texts);
mytexts.setText(myarray[0]);
Thread t = new Thread( new Runnable(){
public void run() {
for (int count = 0; count < arraylength; count++){
handler.postDelayed(new Runnable(){
public void run() {
mytexts.setText(myarray[1]);
}
}, 7000);
}
}
});
t.start();
}
}
从我在 logcat 中看到的情况来看,处理程序似乎一个接一个地运行 postDelayed (在我的代码中,它不会等待 7 秒的 postDelay 来执行另一个 postDelayed)。另外,我想在“mytexts.setText(myarray[1]);”中设置1与 for 循环中的“count”相同,因此它可以与数组中的字符串之一相同,但这给了我一个错误。我已经在这个问题上坚持了几个小时,而我在网上找到的其他例子对于像我这样主要想在解决其他事情之前先了解基础知识的人来说似乎太复杂了。任何有关这方面的帮助将不胜感激。谢谢。
postDelayed
是非阻塞的,这意味着它会将其添加到我稍后会执行此操作的队列中。所以您可能看到的是所有文本更新都在第 7 秒同时发生。我这样说是因为你是postDelay
正在从onCreate
方法,实际上你可能想要这样做onResume
甚至onPostResume
.
也没有理由创建一个线程来将可运行对象添加到后队列中。您的代码应该看起来更像这样:
(注意延迟乘数的时间)
@Override
protected void onResume() {
super.onResume();
for (int count = 0; count < arraylength; count++){
handler.postDelayed(new Runnable(){
@Override
public void run() {
mytexts.setText(myarray[count]);
}
}, 7000 * (count + 1));
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)