2017-01-03 153 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(); 
} 

试试这个,拜托了!

相关问题