Androidの任意の2つ以上のFragment間のインタラクションとリフレッシュインタフェース

3970 ワード

通常、プロジェクトで問題が発生します.サブfragmentで親fragmentのインタフェースをリフレッシュします.一般的には、任意のfragmentで別のfragmentをリフレッシュします.activityとfragmentのインタラクションはインタフェースコールバックとbundleで実現できることはよく知られていますが、このようなfragment間のリアルタイムリフレッシュは少し難しいです.
オリジナル作品は、許可なく転載禁止です.転載は以下のことを明記してください.http://www.cnblogs.com/jiangbeixiaoqiao/
インターネットで調べたところ、現在、ネット上では比較的信頼性が高く、全面的に有効な方法で実現されていません.基本的にはactivityを中間メディアとして伝達していますが、activity->fragment伝達時にfragmentはすべて新しく追加され、以前から存在していた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/

転載先:https://www.cnblogs.com/jiangbeixiaoqiao/p/6214557.html