Android:使用BroadcastReceiver将数据从一个片段传递到另一个片段

时间:2017-01-03 08:20:53

标签: android broadcastreceiver

我尝试将孩子Fragment的数据发送到父Fragment。我为此编写了一个代码,但它似乎没有用。

到目前为止,这是代码。以下是在发件人方面声明的。

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();

2 个答案:

答案 0 :(得分:1)

您正在使用本地广播(仅限App分数),但您正在将广播作为全球发送..我认为您应该使用order代替LocalBroadcastManager.getInstance(Context ctx)发送广播。请参阅下面更新的代码:

Context

P.S。别忘了取消注册接收器

祝你好运,'。

答案 1 :(得分:0)

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

请试试这个!