#java #android #if-statement #while-loop
#java #Android #if-оператор #цикл while
Вопрос:
Когда я нажимаю кнопку один раз, цикл while останавливается, и отображается сообщение, но когда я нажимаю его снова, цикл while не запускается снова (я знаю это, потому что сообщение в runnable не отображается).
Кроме того, комбинация while(!boo) в потоке и boo=true; в кнопке не дает никакого результата.
Что я могу делать не так? Я поставил Boolean boo=true; вне onCreate, поэтому я не думаю, что это проблема…
public class UiTester extends Activity {
protected static final String TAG = null;
String s="";
Button stopper;
TextView display3;
//Boolean boo=true;
int n=0;
public Boolean boo=true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
on=(Button) findViewById(R.id.bon);
off=(Button) findViewById(R.id.boff);
display=(TextView) findViewById(R.id.tvdisplay);
display3=(TextView) findViewById(R.id.tvdisplay3);
stopper=(Button) findViewById(R.id.stops);
final Handler handler = new Handler();
final Runnable updater = new Runnable() {
public void run() {
n ;
display3.setText("System On" n);
}
};
stopper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(boo==true)
{
boo=false;
display3.setText("System Off");
}
else{
boo=true;
}
}
});
Thread x = new Thread() {
public void run() {
while (boo) {
handler.post(updater);
//non UI elements can go here
try {
Log.d(TAG, "local Thread sleeping");
Thread.sleep(1000);
} catch (InterruptedException e) {
Log.e(TAG, "local Thread error", e);
}
}
}
};
x.start();
}
}
Ответ №1:
Когда значение boo равно false, ваш поток просто заканчивается. Это не начнется снова.
Комментарии:
1. О, этого не видел, спасибо! Чтобы реализовать это решение, я попытался ввести boo=false; x.start(); …x не распознается как объект потока. Я думаю, что это может иметь отношение к жизни объекта .. но я не уверен.
2. вы не можете перезапустить поток, вам нужно будет сохранить внешний цикл, который будет входить во внутренний цикл только в том случае, если значение boo равно true