簡體   English   中英

定期自動在兩個按鈕之間切換焦點

[英]Auto change focus between two buttons periodically

package com.example.helloandroid;

import java.util.Timer;  
import java.util.TimerTask;  

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.util.Log;

import android.view.View;

import android.widget.Button;


public class HelloandroidActivity extends Activity {

/** Called when the activity is first created. */

Button mybtn0,mybtn1;

private Handler mhandler= new Handler();

Timer timer= new Timer();

String s=new String(" ");

int delay=0;

int period=5000;

int var=0;

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Object o=null;
    // o.toString();
    // TextView tv = new TextView(this);
    // tv.setText("Hello Andriod");

    setContentView(R.layout.main);
    mybtn0= (Button)findViewById(R.id.number_button);
    //mybtn.requestFocus();
    mybtn0.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Perform action on click
            mybtn0.clearFocus();
        }
    });
    // mybtn2= (Button)findViewById(R.id.contact_button);
    //setUpFocus();

    try
    {

    mybtn1=(Button)findViewById(R.id.contact_button);   
    //mybtn2= (Button)mybtn.focusSearch(View.FOCUS_DOWN);
    mybtn1.requestFocus();
    mybtn0.clearFocus();

    }
    catch(Exception e)
    {
            Log.e("focus change","focus failed",e);
    } 


    timer.scheduleAtFixedRate(new TimerTask(){

        public void run()
        { 

            switch(var)
            {

            case 0: mybtn0.clearFocus();
                    mybtn1.requestFocus();
                    break;

            case 1: mybtn1.clearFocus();
                    mybtn0.requestFocus();
                break;
            default: break;
            }

            var= (var+1)%2;


        }

    }, delay, period);

}

我已經使用上面的代碼使用計時器來完成兩個按鈕之間的自動更改焦點。 但是我收到“從錯誤的線程異常調用”。 我認為是因為計時器。 請有人更正此代碼,並提供有關如何通過Handler類實現此示例代碼。

更改計時器.schedule()看起來像這樣

    timer.scheduleAtFixedRate(new TimerTask(){

    public void run()
    { 


        mHandler.sendEmptyMessage(var); // <--- I suggest you camelCase your variable names so "mhandler" should be "mHandler", it will make them easier to read at a glance.
        var= (var+1)%2;


    }

}, delay, period);

然后將此處理程序實例添加到您的onCreate()方法中,其中:

mHandler = new Handler() {
     public void handleMessage(Message msg) {
            if(msg.what == 0){
                mybtn0.clearFocus();
                mybtn1.requestFocus();
            }else if(msg.what == 1){
                mybtn1.clearFocus();
                mybtn0.requestFocus();
            }
     }
}

您也可以一起跳過TimerTask,並隨同Handler一起進行調度。 查看.sendEmptyMessageDelayed()方法

該代碼需要在UI線程上執行。 Activity.runOnUiThread

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM