2017-01-03 150 views
0

我試圖將數據從子代Fragment發送到父代Fragment。我爲此編寫了一個代碼,但它似乎不起作用。Android:使用BroadcastReceiver將數據從一個片段傳遞到另一個片段

以下是目前的代碼。以下是在發件人一方聲明。

private void sendPINData(String pin) { 
    Intent broadcastIntent = new Intent("PINData"); 
    broadcastIntent.putExtra(Keys.PIN, pin); 
    context.sendBroadcast(broadcastIntent); 
    getFragmentManager().popBackStack(); 
} 

接着,在接收方(父Fragment

下面的行是在onCreateView()方法。

LocalBroadcastManager.getInstance(getActivity()).registerReceiver(localBroadcastReceiver, new IntentFilter("PINData")); 

而這一個是BroadcastReceiver聲明部分。

private final BroadcastReceiver localBroadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(intent != null) { 
      pin = intent.getStringExtra(Keys.PIN); 
      Toast.makeText(context, pin, Toast.LENGTH_SHORT).show(); 
     } 
    } 
}; 

下面的代碼在父Fragment移動到孩子Fragment

    PINFragment fragment = new PINFragment(); 
        FragmentTransaction mTransaction = getFragmentManager().beginTransaction(); 
        mTransaction.replace(R.id.main_frame, fragment); 
        mTransaction.addToBackStack(null); 
        mTransaction.commit(); 
+1

請嘗試調試一下。 'onReceive()'方法是否被觸發? – Lino

+0

這是更好的方法註冊您的接收器onResume()並取消註冊onPause() – rafsanahmad007

+0

@ rafsanahmad007感謝您的提示。我反映在我的代碼:) –

回答

1

您正在使用本地廣播(僅適用於App分數),但您將發送廣播爲全球..我認爲您應該使用LocalBroadcastManager.getInstance(Context ctx)而不是Context來發送braodcast。看到您的代碼更新如下:

private void sendPINData(String pin) { 
    Intent broadcastIntent = new Intent("PINData"); 
    broadcastIntent.putExtra(Keys.PIN, pin); 
    LocalBroadcastManager.getInstance(context).sendBroadcast(broadcastIntent); 
    getFragmentManager().popBackStack(); 
} 

P.S.不要忘記註銷接收器以及

祝你好運,'。

+0

感謝您的答案,但這也沒有工作。 –

+0

有什麼我應該改變在接收方? –

+0

您是否確定接收器片段在您啓動事件時仍處於活動狀態? –

0
private void sendPINData(String pin) { 
    Intent broadcastIntent = new Intent("PINData"); 
    broadcastIntent.putExtra(Keys.PIN, pin); 
    LocalBroadcastManager.getInstance(context).sendBroadcast(broadcastIntent); 
    getFragmentManager().popBackStack(); 
} 

試試這個,拜託了!

相關問題