Подтвердить что ты не робот

Android: onActivityResult в не вызываемом фрагменте

Нашел много сообщений о моей проблеме, но никто из них не работал у меня. У меня есть фрагмент, из которого мне нужно вызвать startActivityForResult() в текстовом клике. Оттуда откроется активность, когда пользователь заполнит некоторые данные и отправит их в базу данных. Оттуда я должен передать намерение, содержащее код результата. Но onActivityResult() в фрагменте не вызван.

Код из моего фрагмента

Intent in = new Intent(getActivity(), NetBarrelActivity.class);
        in.putExtra(AppUtility.ORDER_ID, orderDAO.getOrderNum());
        in.putExtra(AppUtility.TICKET_ID, 2);
        startActivityForResult(in, AppUtility.REQUEST_CODE);

Код из моей активности

Double NetBarrels = crudeNetCalculator(GrossBarrels,
                        ProductObsTemp, ProductObsGravity, ProductBSW);
                db.updateTank(OrderID, TicketTypeID, CarrierTicketNum,
                        TankNum, TankTypeID, ProductObsTemp,
                        ProductObsGravity, ProductBSW, GrossBarrels,
                        NetBarrels);
                Intent in = new Intent();
                setResult(RESULT_OK, in);
                finish();

onActivityResult в фрагменте:

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "onActivityReslt called");
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case AppUtility.REQUEST_CODE:
        if(resultCode == Activity.RESULT_OK){
            if (mOrdersDAO.getTicketType().equals(AppUtility.NET_BARREL)) {
                ArrayList<OrderTicketsDao> mOrderTicketsDaos = dbHandler
                        .getOrderTicket(mOrdersDAO.getOrderNum());
                if (mOrderTicketsDaos != null && mOrderTicketsDaos.size() > 0) {
                    TankAdapter mTankAdapter = new TankAdapter(getActivity(),
                            mOrderTicketsDaos);
                    listTank.setAdapter(mTankAdapter);
                    mTankAdapter.notifyDataSetChanged();
                }
            }
        }
        break;

    default:
        break;
    }
}

Итак, как мне отправить намерение назад к моему фрагменту с кодом результата?

4b9b3361

Ответ 1

Так как я хотел, чтобы мой фрагмент перехватил намерение, я использовал LocalBroadcastManager.

В onCreate фрагмента я определил:

LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
            mUpdateUIReceiver,
            new IntentFilter(String action));

Мой приемник по фрагменту:

private BroadcastReceiver mUpdateUIReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        //do Stuff
    }
};

Код операции, который будет отправлять широковещание:

LocalBroadcastManager.getInstance(this).sendBroadcast(
            new Intent(String action));

Надеюсь, что это поможет кому-то, кто сталкивается с такой же проблемой.