android中Timer与TimerTask跟handler的交互以及android键盘的操纵

Timer跟TimerTask其实非常简单,用来执行一段规定时间内完成的任务,本文做的是设置Button的文本,首先activity创建的时候会显示默认文本“哈哈”,3S‘之后将Button文本改成“嘿嘿”,如果点击了Button,则定时器会进行新的一轮的定时任务,基于这个原理其实是可以开发类似于轮询的这种业务,但是使用这种方式不太好。
同时,点击Button会切换软键盘的状态,控制显示隐藏软键盘。

 

 

public class TestTimerTaskActivity extends Activity implements OnClickListener {
	private static final int MESSAGE_WHAT = 100;
	private Button btnClick;
	private Timer mTimer;
	private TimerTask mTimerTask;
	private InputMethodManager inputMethodManager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.timer);

		init();
		mTimer = new Timer(true);
		initTimerTask();

	}

	/**
	 * Initialize TimeTask
	 */
	private void initTimerTask() {
		if (null != mTimer && null != mTimerTask)
			mTimerTask.cancel();
		mTimerTask = new MyTimerTask();
		mTimer.schedule(mTimerTask, 3000);
	}

	/**
	 * Initialize the views
	 */
	private void init() {
		btnClick = (Button) findViewById(R.id.btnClick);
		btnClick.setOnClickListener(this);

		inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
	}

	/**
	 * Handler Update UI
	 */
	Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if (msg.what == MESSAGE_WHAT) {
				btnClick.setText(String.valueOf(msg.obj));
			}
		}

	};

	/**
	 * Override Button ClickListener
	 */
	@Override
	public void onClick(View v) {
		int id = v.getId();
		switch (id) {
		case R.id.btnClick:
			btnClick.setText("哈哈");
			initTimerTask();
			toggleSoftKeyBoard();
			break;

		default:
			break;
		}
	}

	/**
	 * toggleSoftKeyBoard status
	 */
	private void toggleSoftKeyBoard() {
		if (inputMethodManager.isActive()) {
			inputMethodManager.toggleSoftInput(
					InputMethodManager.SHOW_IMPLICIT,
					InputMethodManager.HIDE_NOT_ALWAYS);
		}
	}

	/**
	 * Send message to UIThread
	 * 
	 * @param what
	 *            message identifies
	 * @param str
	 *            Content of the message
	 */
	private void sendMssage(int what, String str) {
		Message message = handler.obtainMessage(what, str);
		handler.sendMessage(message);
	}

	/**
	 * Custom Derived class
	 * 
	 * @author wallace
	 * 
	 */
	private class MyTimerTask extends TimerTask {

		@Override
		public void run() {
			sendMssage(MESSAGE_WHAT, "嘿嘿");
		}
	}

}

 

 

如果你想在activity刚创建的时候就调出软键盘,上述切换软键盘状态的函数是不起作用的,要用这个函数,其实没有必要用这段代码显示软键盘,直接在manifest文件里配置activity的时候给activity配置android:windowSoftInputMode="stateVisible|adjustPan"这个属性,就能自动弹出软键盘

 

private void toggleSoftKeyBoard() {
		Timer timer = new Timer();
		timer.schedule(new TimerTask() {

			@Override
			public void run() {
				inputMethodManager.toggleSoftInput(
						InputMethodManager.SHOW_IMPLICIT,
						InputMethodManager.HIDE_NOT_ALWAYS);
			}
		}, 100);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值