【发布时间】:2014-02-08 16:51:10
【问题描述】:
在一项活动中,我有这种递归方法:
private void startThread(final int i){
if(i < length){
TaskCross taskCross = new TaskCross();
TaskScreenshot taskScreenshot = new TaskScreenshot(i);
TaskNoise taskNoise = new TaskNoise();
TaskEditText taskEditText = new TaskEditText();
handler.postDelayed(taskCross, 1000);
handler.postDelayed(taskScreenshot, 2000);
handler.postDelayed(taskNoise, 2100);
handler.postDelayed(taskEditText, 3000);
myEditText.setOnKeyListener(new View.OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event) {
System.out.println("KEY ENTER!!!!!");
if((keyCode == KeyEvent.KEYCODE_ENTER)) {
if(myEditText.getText().toString().equals("")){
Toast.makeText(getApplicationContext(), "Inserire un numero da 1 a 9", Toast.LENGTH_SHORT).show();
return false;
} else if (Integer.parseInt(myEditText.getText().toString()) >= 1 &&
Integer.parseInt(myEditText.getText().toString()) <= 9){
startThread(i+1);
return true;
}
}
return false;
}
});
}
}
假设变量length 的值为5;结果的顺序是:
TaskCross
TaskScreenshot(0)
TaskNoise
TaskEditText
TaskCross
TaskCross
TaskScreenshot(1)
TaskScreenshot(2)
TaskNoise
TaskNoise
TaskEditText
TaskEditText
TaskCross
TaskCross
TaskScreenshot(3)
TaskScreenshot(4)
TaskNoise
TaskNoise
TaskEditText
TaskEditText
但我想要的结果是这样的:
TaskCross
TaskScreenshot(0)
TaskNoise
TaskEditText
TaskCross
TaskScreenshot(1)
TaskNoise
TaskEditText
TaskCross
TaskScreenshot(2)
TaskNoise
TaskEditText
TaskCross
TaskScreenshot(3)
TaskNoise
TaskEditText
TaskCross
TaskScreenshot(4)
TaskNoise
TaskEditText
TaskEditText 是一个扩展Runnable 的类;此类折叠ImageView 并显示EditText。在EditText 中,当用户按下键盘的 Enter 键时,该方法被递归调用。
方法的第一次调用是startThread(0)
所以,我的问题是:我在这种方法中做错了什么?我是否以正确的方式使用postDelayed 方法?
谢谢!
【问题讨论】:
标签: java android runnable android-handler