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