2013-09-08 63 views
11

Tìm thấy nhiều bài đăng liên quan đến vấn đề của tôi nhưng không có bài nào trong số đó phù hợp với tôi. Tôi có một đoạn từ nơi tôi phải gọi số startActivityForResult() trên một lần xem văn bản. Từ đó, một hoạt động sẽ mở ra nơi người dùng sẽ điền vào một số dữ liệu và gửi nó vào cơ sở dữ liệu. Từ đó, tôi phải chuyển một mục đích chứa mã kết quả. Nhưng onActivityResult() trong đoạn không được gọi.Android: onActivityResult trong phân đoạn không được gọi là

Mã từ mảnh của tôi

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

Mã từ hoạt động của tôi

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 trong Fragment:

@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; 
    } 
} 

Vì vậy, làm thế nào tôi gửi ý định trở lại F của tôi ragment với mã kết quả?

+0

Bạn sẽ có thể tìm ra giải pháp cho vấn đề của bạn [ở đây] [1] [1]: http://stackoverflow.com/questions/6147884/onactivityresult-not-being-called- in-fragment – Exoit

+0

Cảm ơn, tôi đã truy cập vào liên kết. Không làm việc – Nitish

+0

Mặc dù tôi hơi muộn, nhưng đây là cách nó đã làm việc cho tôi, thực hiện 'onActivityResult()' trong chính 'Activity', nhận phần bổ sung' Intent' và chuyển chúng vào một phương thức ' Fragment' có liên quan đến việc cập nhật hoặc truy xuất dữ liệu. –

Trả lời

19

Vì tôi muốn mảnh vỡ của mình ngăn chặn ý định nên tôi đã sử dụng LocalBroadcastManager.

Trong onCreate của Fragment, tôi đã xác định:

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

nhận của tôi trong đoạn:

private BroadcastReceiver mUpdateUIReceiver = new BroadcastReceiver() { 

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

đang Hoạt động đó sẽ gửi broadcast:

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

Hy vọng nó giúp người đang đối mặt với cùng một vấn đề.

+1

Tôi thấy đây là một cách rất sạch sẽ để vượt qua kết quả khi sử dụng các mảnh vỡ và các gói con. cám ơn vì sự gợi ý. – TrueCoke

+0

Cảm ơn câu trả lời rất hữu ích đã giải quyết được vấn đề của tôi! Tôi cũng cần gửi một số văn bản từ một hoạt động khác đến phân đoạn, có thể dễ dàng thực hiện bằng cách thêm các giá trị bổ sung vào mục đích. – Micer