簡體   English   中英

基於Activity的廣播接收器更新片段ui

[英]update fragment ui based off of Activity's Broadcast Receiver

首先讓我說我已經閱讀了與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
    }

}

根據您的代碼,以下是您可以快速完成的工作。

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

創建一個自定義基礎片段MyCustomFragment並有一個抽象方法updateFragmentContent(),那么你只需要更改選項卡索引而不需要特殊的類型轉換

請注意,以上是一種更干凈的方法。 使用現有代碼,您仍然可以使用兩個單獨的類型轉換,並調用兩個單獨的方法來更新相應的片段。

希望這可以幫助。

由於BroadcastReceiverFragmentActivity之間的復雜溝通,我遇到了類似的問題,並選擇擺脫這種扭曲,並使用以下內容:

調用BroadcastReceiver onReceive()方法時,向SharedPreferences添加一個boolean作為Fragment應該執行某些操作的指示標志,並在片段onResume()方法中根據BroadcastReceiver onReceive()設置的SharedPreferences boolean執行所需的邏輯方法。

盡管有更好的實踐,但我沒有在長期運行的應用程序中測試這種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM