0

コンテナー レイアウト内でフラグメント マネージャーを使用して、アクティビティに 1 つのフラグメントを読み込みました。私のアクティビティ内で、他のBluetoothデバイスに接続するサービスを開始し、特定のデータを送受信して通信します。アプリが開いていて、サービスがBluetoothデバイスに接続されている場合、すべてが正常に機能します。

しかし、戻るボタンを押してアプリを再度開くと、サービスはまだ他のBluetoothデバイスに接続されていますが、同じ表示に使用しているフラグメントは切断された状態であることを示しています。テキストをフラグメントの子テキストビューに設定する前にチェックを入れました

フラグメント.isVisible()

そしてそれはfalseを返しました(?)

だから、私が間違っていなければ、アクティビティはアプリを開くたびに元のフラグメントに別のフラグメントのインスタンスを作成していると思います。

これが私のアクティビティの onCreate() です..

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_bt_dashboard);

    System.out.println("OnCreate() of BTDashboardActivity........");

    if (findViewById(R.id.fragmentContainer) != null) {

        if (savedInstanceState != null) {

            System.out.println("ListFragmetn allready exist...");
            return;
        }

        System.out.println("adding listfragment to view...");

        listFragment = new BTDashboardListFragment();

        listFragment.setArguments(getIntent().getExtras());

        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragmentContainer, listFragment).commit();

    }
}

編集

アクティビティの onStart() のコードは次のとおりです。

@Override
public void onStart() {
    super.onStart();
if (!mBluetoothAdapter.isEnabled()) {
    Intent enableIntent = new Intent(
                    BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableIntent,
                    Constants.REQUEST_ENABLE_BT);
        } else {
            if (mBluetoothService == null) {
                startBluetoothService();
                Log.d(TAG, "Chat service Started...@@@@@@@@@@@@");

                showDisconnectedUI();

            System.out.println("showing disconnceted status to the user..");

            } else {
                if (mBluetoothService.getState() == Constants.STATE_CONNECTED) {

                System.out.println("showing connection status to the user..");
                    showConnectedUI();

                } else {

            System.out.println("showing disconnceted status to the user..");
                    showDisconnectedUI();

                }
            }

        }

}

そして、これはフラグメントの子ビューにデータを設定するコードです..

protected void handleResponse(String readMessage) {


    System.out.println("response from device: " + readMessage);

    if (readMessage != null) {

         if (listFragment != null && listFragment.isInLayout()) {
         System.out.println("List fragment is found...");

        System.out.println("Setting response text to listFragment...");



        if(listFragment.isVisible())   // prints not visible after reopening the app
            System.out.println("listFragment is visible ...");
        else
            System.out.println("listFragment is not visible..."); 

        listFragment.setResponseText(readMessage);

        }
              }

どんな助けでも大歓迎です..

4

1 に答える 1

0

フラグメントインスタンスを静的にすることで、私の問題は解決しました。これは単なる回避策ですが、今のところ私にとっては魅力のように機能します。

于 2012-12-21T07:06:30.607 に答える