我正在使用handler.postDelayed()我的应用程序的下一个阶段之前创建一个等待期.在等待期间,我显示一个带有进度条和取消按钮的对话框.
我的问题是我找不到在时间流逝之前取消postDelayed任务的方法.
我通过新的Handler()调用多个处理程序.postDelayed(new Runnable().....如果单击返回按钮,我怎么能阻止它?
public class MyActivity extends AppCompatActivity implements OnClickListener {
private Button btn;
private Handler handler;
private Runnable myRunnable;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btn = (Button) findViewById(R.id.trainingsstart);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Handler handler = new Handler();
Runnable myRunnable = new Runnable() {
public void run() {
// Things to be done
}
};
handler.postDelayed(myRunnable, 3000);
}
@Override
public void onBackPressed() {
super.onBackPressed();
handler.removeCallbacks(myRunnable);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个问题,我的处理程序没有像"myHandler"这样的名字.我该怎么处理?感谢帮助!
现在我收到了这些错误:
03-28 17:47:03.662: E/AndroidRuntime(1961): FATAL EXCEPTION: main …Run Code Online (Sandbox Code Playgroud) 我有一个"开放"的动画,Handler.postDelayed(Runnable, delay)用于在短暂延迟后触发"关闭"动画.但是,在打开和关闭之间的时间内,可能会有一个由点击触发的动画.
我的问题是,如何取消处理程序中的"关闭"动画?
我有一个Android应用程序的情况,我想开始一个应该每秒运行的网络活动(发送一些数据).我实现如下:
在onCreate()我有代码:
tv = new TextView(this);
tv.postDelayed(sendData, 1000);
Run Code Online (Sandbox Code Playgroud)
该sendData()函数:
Handler handler = new Handler();
private Runnable sendData=new Runnable(){
public void run(){
try {
//prepare and send the data here..
handler.removeCallbacks(sendData);
handler.postDelayed(sendData, 1000);
}
catch (Exception e) {
e.printStackTrace();
}
}
};
Run Code Online (Sandbox Code Playgroud)
问题是这样的:当用户按下后退按钮并且应用程序出现(UI消失)时,该sendData()功能仍然会被执行,这就是我想要的.现在,当用户重新启动应用程序时,我onCreate()再次被sendData()调用,并且每秒调用两次.它继续这样下去.每当用户出来并重新开始时,sendData()每秒钟就会发生一次.
我究竟做错了什么?这是我的new Handler()创造问题吗?处理这个问题的最佳方法是什么?sendData()在用户退出应用程序(表单应用程序管理器)之前,我希望每秒调用一次.
我有一个countDownTimer,如果用户在第12秒内没有点击gameButton我想要调用gameOver方法.问题当countDownTimer为12或者计时器只是不断倒计时,我或者得到名为instamtly的游戏功能.所以我试图使用postDelayed()方法给用户一个完整的秒来点击按钮并让countDownTimer继续,但正如我的代码现在,游戏停在12无论如何.
import android.app.Activity;
import android.os.CountDownTimer;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class GameScreen extends Activity {
private TextView time;
private Button start;
private Button cancel;
private Button gameButton;
private CountDownTimer countDownTimer;
public static int count = 0;
public static int countFail = 0;
final Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
handler.postDelayed(this, 1000);
gameOver();
}
};
private View.OnClickListener btnClickListener = new View.OnClickListener(){ …Run Code Online (Sandbox Code Playgroud) 我已经看过每一个讨论和我可以找到的关于让它工作的线程,但事实并非如此.我有一个更新文本视图的简单计时器(下例中的mTimeTextField).正在正确执行mUpdateTimeTask运行方法(每秒),但UI /文本字段未更新.
我有基于以下信息的代码:
http://android-developers.blogspot.com/2007/11/stitch-in-time.html http://developer.android.com/resources/articles/timed-ui-updates.html
这是代码:
package com.something.handlertest;
import com.something.handlertest.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Test extends Activity {
private Handler mHandler = new Handler();
private int labelNo = 0;
private long currTime = 0L;
private long mStartTime = 0L;
TextView mTimeTextField;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTimeTextField = (TextView)findViewById(R.id.timeTextFieldl);
Button startButton = (Button)findViewById(R.id.start_button);
startButton.setOnClickListener(new …Run Code Online (Sandbox Code Playgroud) 我正在构建一个具有AI功能的Android棋盘游戏.AI转向并且必须调用一系列操作,之后它会向我的自定义视图发布无效更新.
我需要减慢这些动作,以便用户看到AI轮到而不是闪烁.
我试过这些方面的东西
try {
doFirstThing();
Thread.sleep(500)
//post invalidate
doNextThing();
Thread.sleep(1000)
//post invalidate
}
catch (Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
然而,这绝对没有效果.如果这不明显,这也是在一个单独的线程中运行.
什么是我最好的选择我看过处理程序,但他们不需要正确,因为我需要按顺序执行一系列任务每次更新视图.
我想知道是否可以使用handler().postdelayed两次?
我的意思是,我想创建一个按钮,单击它时会更改颜色并保持此状态1秒,然后,1秒后另一个按钮更改颜色.
我创建了以下代码:
在onclicklistener中:
btn3.setBackgroundColor(Color.WHITE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
checkAnswer();
waitAnswer();
btnRsp3.setBackgroundResource(R.drawable.selector);
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)
检查答案:
public void CheckAnswer(){
btn1.setBackgroundColor(Color.GREEN);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
}
}, 500);
btn1.setBackgroundResource(R.drawable.selector);
}
Run Code Online (Sandbox Code Playgroud)
我认为问题出现在CheckAnswer上,因为它看起来并没有停留在这个postDelayed中并且步入waitAnswer.
谢谢
我有一个布局,指定相对维度的小部件大小,例如:
<LinearLayout ... layout_height="fill_parent">
<ImageView ... layout_height="wrap_content" />
<TextView ... layout_height="120dp" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
紧接着onCreate,我想知道ImageView的高度是多少.怎么做?
注:如果我打电话getHeight()的onCreate,我得到0.
我也试过imageView.postDelayed,它适用于2.1模拟器但在1.5模拟器上失败(我也得到0).
最后,我尝试创建一个Handler,然后我handler.postDelayed用10毫秒的延迟调用.它适用于2.1和1.5模拟器,但是当我在eclipse调试器中启动程序时失败(因此,我得出结论,使用延迟并不能保证在imageview布局后获得高度.)
我正在使用postDelayed方法,Handler以便在一定时间后执行操作:
private static int time_to_wait = 2000;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Make Action
}
}, time_to_wait);
Run Code Online (Sandbox Code Playgroud)
现在在等待时间的中间我想要更改剩余毫秒的值,因为一些处理结果,让我们说它现在等待1000毫秒,我想让它开始从2000再次计数,所以,我设置time_to_wait值到2000年,但它没有计数,因为它只需要var值(2000),只是等待那个时间,无论将time_to_wait值更改为任何其他值.