2

まず、SOのフラグメントに関連する多くの質問を読み終えたとしましょう。しかし、私とまったく同じ状況を見つけることはできないようです。

PageAdapterを使用しているmyActivityがあり、各ページはフラグメントです。ネットワーク接続などに関する更新を受信するサービスもあります。このサービスは、myActivityで受信者をトリガーします。myActivityはFragmentPage1を更新する必要がありますが、pageAdapterを使用しており、実行時にフラグメントを作成しているため、「findFragmentbyId」などはできません。データを渡す必要はありません。FragmentPage1クラス内で関数をトリガーするだけです。以下のコードスニペットを参照してください。

public class myActivity extends FragmentActivity implements ViewPager.OnPageChangeListener {

    FragmentManager fm = getSupportFragmentManager();
    mPagerAdapter = new PagerAdapter(fm);
    mPager.setAdapter(mPagerAdapter);
    mPager.setOnPageChangeListener(this);

    // add tabs. Use ActionBar for 3.0 and above, otherwise use TabWidget
    final ActionBar bar = getActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    bar.addTab(bar.newTab()
            .setText(R.string.fragment_page_1)
            .setTabListener(new ActionBarTabListener(mPager)));
    bar.addTab(bar.newTab()
            .setText(R.string.fragment_page_2)
            .setTabListener(new ActionBarTabListener(mPager)));

     private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive (Context context, Intent intent){
                 if(intent.getAction().equals(InterfaceManager.BROADCAST_UPDATE_CONNECTION_STATS)) { 
                     updateFragmentPage2();
                 } else if (intent.getAction().equals(InterfaceManager.BROADCAST_UPDATE_RULES)) {
                     UpdateFragmentPage1();
                 }
            }
     };
}


public class FragmentPage2 extends Fragment implements OnCheckedChangeListener, OnClickListener  {
    public void UpdateFragmentPage2() {
        //update list view
    }

}
4

2 に答える 2

2

コードに基づいて、すばやく実行できることは次のとおりです。

int tabIndex = 0;
MyCustomFragment frag = getFragmentManager().findFragmentByTag(getActionBar().getTabAt(tabIndex).getText().toString());
frag.updateFragmentContent();

カスタムベースフラグメントMyCustomFragmentを作成し、抽象メソッドupdateFragmentContent()を使用すると、タブインデックスを変更するだけで、特別な型キャストは不要になります。

上記はそれを行うためのよりクリーンな方法であることに注意してください。既存のコードでは、2つの別々の型キャストを使用し、2つの別々のメソッドを呼び出して対応するフラグメントを更新できます。

お役に立てれば。

于 2013-02-12T15:16:24.757 に答える
1

BroadcastReceiverFragmentとの間の複雑な通信のためにActivity、私は同様の問題に直面し、そのねじれから抜け出すことを選択し、以下を使用しました。

BroadcastReceiver onReceive()メソッドが呼び出されたら、フラグメントが何かを実行する必要があることを示すフラグとしてにを追加し、フラグメントbooleanメソッドでは、メソッドのセットに基づいて必要なロジックを実行します。SharedPreferencesonResume()SharedPreferences booleanBroadcastReceiver onReceive()

ただし、より良い方法があり、長期的なアプリケーションでそのようなアプローチをテストしなかったことを知っておいてください。

于 2014-07-23T21:16:01.393 に答える