我遇到一个问题,即在Java中运行一个简单的循环就可以在Android中运行了。
我创建了一个textview并将其设置为仅用于测试运行。当我运行这个时,我会在框中显示一个数字,就是这样,它永远不会改变为另一个数字。
我尝试使用for循环,但我得到的只是标题栏然后黑屏然后崩溃。
Eclipse中没有错误,她确实运行,没有错误,只是没有数字更新。
如果你想知道第二个while循环,它有点像一个暂停,所以你可以看到数字看起来更慢,并且使用纯Java。
Just and FYI我在youtube上观看vid时已经学习了两个星期的Java。我已经创建了一些Android应用程序,这些应用程序很简单但只是无法在Android中循环到循环。
感谢新人的帮助。
public class MainActivity extends ActionBarActivity {
TextView display;
int counter;
int min = 1;
int max = 5;
int counter2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (TextView) findViewById(R.id.textView1);
while(counter < 10){
Random r = new Random();
int rn = r.nextInt(max - min + 1) + min;
String rando = Integer.toString(rn);
display.setText(rando);
while(counter2 < 5000){
counter2++;
}
counter++;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
答案 0 :(得分:1)
Android使用事件驱动的UI模型,包括lifecycle event
方法,如onCreate(),onPause(),各种键/按钮方法等。 这些是完成工作并在几毫秒内返回所必需的。
要执行更长时间的运行任务 - 包括重复更新 - 您将不得不使用除主/ UI线程之外的线程,包含该线程的众多机制之一,或添加其他事件,例如通过Timer。 / p>
另请注意,您无法从UI线程以外的任何线程触摸UI,因此当您的后台方法决定要在UI中更改某些内容时,它必须将该实际更新操作推送到UI线程,一个机制,如runOnUiThread()或处理程序。
答案 1 :(得分:0)
这里只是做一个吐司,而不是设置文本视图,这样你就可以看到发生了什么,我改变了你的计数器,在每次更新后重置,所以下一个#有一个暂停..如果你为textview做的那样尝试在onCreate()因为你只能在创建后看到视图,这就是为什么你没有看到每次暂停的变化。
while(counter < 10){
Random r = new Random();
int rn = r.nextInt(max - min + 1) + min;
String rando = Integer.toString(rn);
Toast.makeText(this, rando, 1).show();
//reset your counter to slow the next # down
counter2=0;
while(counter2 < 50){
counter2++;
}
counter++;
}
如果你需要在textview上打印它们,你需要在排队的runnable上运行它们。或者你可以做一个单独的线程但是没有一个单独的线程的单向:
public class MainActivity extends ActionBarActivity {
TextView display;
int counter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (TextView) findViewById(R.id.textView1);
handler = new Handler();
//this starts the runnable right away
handler.postDelayed(updateTextRunnable, 0);
}
}
private Runnable updateTextRunnable = new Runnable() {
public void run() {
doStuff();
}
};
public void doStuff(){
Random r = new Random();
int rn = r.nextInt(max - min + 1) + min;
String rando = Integer.toString(rn);
display.setText(rando);
//heres the pause, it runs every two seconds
if(counter<10)
handler.postDelayed(updateTextRunnable, 2000);
counter++;
}
}