安卓:在片段中调用的onActivityResult未被调用

11

我在网上找了很多关于我的问题的帖子,但是都没有解决我的问题。我有一个片段,我必须在其中调用startActivityForResult() 来处理TextView的点击事件。从那里,将打开一个活动,在那里用户将填写一些数据并将其提交到数据库。然后,我必须传递包含结果代码的意图。但是,在片段中的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);

我的Activity中的代码

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

在Fragment中的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;
    }
}

那么,我如何将带有结果代码的intent发送回我的Fragment?


你应该能够在这里找到解决问题的方法。 - Exoit
谢谢,我已经访问了链接。没有起作用。 - Nitish
虽然我有点晚了,但这是对我有效的方法:在Activity中实现onActivityResult(),接收Intent附加信息并将其传递给Fragment的一个方法,在更新或检索数据时执行相关操作。 - Rachit Mishra
1个回答

20

因为我希望我的Fragment拦截Intent,所以我使用了LocalBroadcastManager

在Fragment的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));
希望这能帮助到遇到同样问题的人。

1
我认为这是在使用片段和子片段时传递结果的一种非常清晰的方式。感谢您的建议。 - TrueCoke
感谢您提供非常有用的答案,解决了我的问题!我还需要从另一个活动发送一些文本到片段中,这可以通过向意图添加额外值来轻松完成。 - Micer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接