私は別の方法でそれを達成しました。私は自分のアプリを次のように動作させています:
アプリを起動した後、HomeFragment を含む MainActivity が作成されました。HomeFragment には、BluetoothConnection の状態を接続/表示するための Button と TextView があります。
HomeFragment では、BluetoothService から情報を受け取るための Handler を実装しました。メッセージを受け取った後、TextView と Button テキストを更新したいと思いました。TextView と Button の文字列引数を取得するメソッドを使用して、HomeFragment にパブリック インターフェイスを作成しました。onAttach(Activity a) では、アクティビティと対話するための mCallback オブジェクトを作成しました。
次のステップは、このインターフェイスを MainActivity に実装することです。このアクティビティから、TextView と Button を更新しています。すべてが次のようになります。
HomeFragment.java
public interface ViewInterface{
public void onViewUpdate(String buttonTxt, String txtTxt);
}
@Override
public void onAttach(Activity a){
super.onAttach(a);
try{
mCallback = (ViewInterface)a;
}catch (ClassCastException e){
e.printStackTrace();
}
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_STATE_CHANGE:
if(true) Log.i(CLASS_TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1);
switch (msg.arg1) {
case BluetoothConnectionService.STATE_CONNECTED:
threadTextString = "Connected to: " + connectedDeviceName;
threadBtnString = "Disconnect";
mCallback.onViewUpdate(threadBtnString, threadTextString);
break;
case BluetoothConnectionService.STATE_CONNECTING:
threadTextString = "Connecting...";
mCallback.onViewUpdate(threadBtnString, threadTextString);
break;
case BluetoothConnectionService.STATE_NONE:
threadBtnString = "Connect";
threadTextString = "You're not connectedd";
mCallback.onViewUpdate(threadBtnString, threadTextString);
break;
}
private void updateBtn(Button btn, String data){
btn.setText(data);
Log.d(CLASS_TAG + "/" + "updateBtn", "Data: " + data);
}
private void updateTxt(TextView txt, String data){
txt.setText(data);
Log.d(CLASS_TAG + "/" + "updateTxt", "Data: " + data);
}
public void update(String buttonTxt, String txtTxt){
this.updateTxt(connectTxt, txtTxt);
this.updateBtn(connectButton, buttonTxt);
}
MainActivity.java
@Override
public void onViewUpdate(String buttonTxt, String txtTxt) {
HomeFragment homeFragment = (HomeFragment)getSupportFragmentManager().findFragmentById(R.id.frame_container);
if(homeFragment != null){
homeFragment.update(buttonTxt, txtTxt);
}
}