[英]Update fragment ui from broadcast receiver in MvvM architecture and Kotlin
[英]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(),那么你只需要更改選項卡索引而不需要特殊的類型轉換
請注意,以上是一種更干凈的方法。 使用現有代碼,您仍然可以使用兩個單獨的類型轉換,並調用兩個單獨的方法來更新相應的片段。
希望這可以幫助。
由於BroadcastReceiver
, Fragment
和Activity
之間的復雜溝通,我遇到了類似的問題,並選擇擺脫這種扭曲,並使用以下內容:
調用BroadcastReceiver
onReceive()
方法時,向SharedPreferences
添加一個boolean
作為Fragment應該執行某些操作的指示標志,並在片段onResume()
方法中根據BroadcastReceiver
onReceive()
設置的SharedPreferences
boolean
執行所需的邏輯方法。
盡管有更好的實踐,但我沒有在長期運行的應用程序中測試這種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.