安卓任意兩個或多個Fragment之間的交互與刷新界面


  平時項目中遇到一個問題:在子fragment中刷新父fragment的界面,通俗的說也就是在任何一個fragment中來刷新另一個fragment。大家都知道activity和fragment之間的交互可以通過接口回調和bundle來實現,但是這種fragment之間的實時刷新就有些困難了。

原創作品,未經允許禁止轉載,轉載請注明來自:http://www.cnblogs.com/jiangbeixiaoqiao/

  經過上網查閱,目前網上還沒有比較靠譜全面有效的方式來實現,基本都是通過activity作為中間媒介進行傳值,但是這會遇到一個問題,就是activity—>fragment傳值時fragment是都新加的(add或者repalce),並不是之前就存在的fragment,所以與我所講的不是一回事。這里講的是所有的fragment都是加載完畢的,存在回退棧中,來實時刷新回退棧中的fragment。話不多說,上代碼,主要實現原理是通過安卓的廣播機制來實現的。

 

首先,在需要進行刷新更新UI的fragment中注冊廣播接收器:

  
/**
* 注冊廣播接收器
*/
private void registerReceiver() {
broadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("jerry");
broadcastManager.registerReceiver(mAdDownLoadReceiver, intentFilter);
}

//原創作品,未經允許禁止轉載,轉載請注明來自:http://www.cnblogs.com/jiangbeixiaoqiao/
private BroadcastReceiver mAdDownLoadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String change = intent.getStringExtra("change");
if ("yes".equals(change)) {
// 這地方只能在主線程中刷新UI,子線程中無效,因此用Handler來實現
new Handler().post(new Runnable() {
public void run() {
//在這里來寫你需要刷新的地方
//例如:testView.setText("恭喜你成功了");
}
});
}
}
};

/**
* 注銷廣播
*/
@Override
public void onDetach() {
super.onDetach();
broadcastManager.unregisterReceiver(mAdDownLoadReceiver);
}
 
        

在需要進行刷新更新UI的fragment中的onCreate方法中進行廣播的注冊:

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity = (MainActivity) getActivity();
    //注冊廣播 registerReceiver(); }

在子fragment中發送廣播來實現刷新另一個fragment,這里我用button的點擊來舉例:

    btn_change.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
          //本文來自原創:
http://www.cnblogs.com/jiangbeixiaoqiao/
                Intent intent = new Intent("jerry");
                intent.putExtra("change", "yes");
                LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
            }
        });

至此,就實現了所說的任意fragment之間進行刷新,只需要在需要刷新的fragment中注冊一個廣播即可,簡單吧。PS:只要廣播監聽器

intentFilter.addAction("jerry");一樣,就可以實現一次刷新多個fragment,歡迎朋友們留言交流~

感覺有用的朋友動動您的小手推薦一下,非常感謝。

原創作品,未經允許禁止轉載,轉載請注明來自:http://www.cnblogs.com/jiangbeixiaoqiao/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM