Androidコールバックメカニズム簡単まとめ:Handler更新UI


プロジェクトの正常な動作を満たすためにインタフェースへのコールバックメカニズムを使用する場合があります.これまでFragmentとActivityの間で通信を操作していたときにインタフェースのコールバックメカニズムを使用したことがあるので、その時はまとめる考えはありませんでしたが、今また使用するときは、ぼんやりした記憶が残っていることに気づきました.復習を容易にするために、もう一度まとめてみます.ここでの機能は、handler非同期スレッドによってUIを更新し、handlerは他のクラスに格納されます.まずActivity、インタフェース、その他のクラスを用意します.
原理:UIを更新する場合は、まずUIを更新するコンポーネントを取得し、次に更新するデータを取得します.同じActivityで更新するのはもちろん、レイアウト内の対応するコンポーネントを取得してデータを埋め込むだけでいいです.インタフェースのコールバックメカニズムについて述べるので、コールバックメカニズムではどうすればいいのでしょうか.簡単な説明を参照してください.まず、TextViewのようなUIのコンポーネントを更新する方法を定義する通信インタフェースを作成します.また、Activityにインタフェースを実装させます.その後、インタフェースのサブクラスであるActivityをインスタンス化することに成功しました.ここで明らかにします.Activityはさまざまなコンポーネントを得ることができます.Activityによって実装されるこのインタフェースの方法は、必要なコンポーネントを送信することができる.動作の実行:他のクラスはここで役に立ちます.コンポーネントはすでに得られているので、どのようにクラスに伝わりますか.もちろん、ここではインタフェースを使用しています.インタフェースをインスタンス化してこそ、インタフェースのメソッドが得られるので、インタフェースをインスタンス化する方法を提供しなければなりません.私たちは前にインタフェースをインスタンス化したので、発見しましたか?Activityです.このクラスではActivityがそれを自分で伝える方法を提供する必要があります.このクラスはnewで出られるからです.以上の方法により、Activityのコンポーネントを他のクラスに正常に転送し、他のクラスはhandlerを使用して非同期データを取得することができます.ほぼ原理が整理されました.キーコードを見てください.
インターフェイス
public interface ICallBack {

    //    
    public TextView getText();

}
Activity:
public class SecondActivity extends Activity implements ICallBack {

    private TextView txt;

    private Button btn;

    private Bean bean = new Bean(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.show);
        txt = (TextView) findViewById(R.id.txtShow);

        btn = (Button) findViewById(R.id.btnToMain);

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                bean.updateUI();
            }
        });
        //bean.setICallBackListener(this);
    }

    @Override
    public TextView getText() {
        return txt;
    }

}
その他のクラス:Bean
private ICallBack iCallBack;

//  public void setICallBackListener(ICallBack iCallBack) {
//      this.iCallBack = iCallBack;
//  }

    public Bean(ICallBack iCallBack){
        this.iCallBack=iCallBack;
    }

    private TextView txtView;

    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {

            switch (msg.what) {
            case 1:
                txtView.setText((CharSequence) msg.obj);
                break;

            default:
                break;
            }

        };
    };

    class MyThread implements Runnable {

        @Override
        public void run() {
            Message msg = mHandler.obtainMessage();
            msg.what = 1;
            msg.obj = "   handler      ....";
            mHandler.sendMessage(msg);
        }

    }

    public void updateUI() {
        txtView = iCallBack.getText();
        new Thread(new MyThread()).start();
    }