2013-09-08 12 views
11

Gefunden zahlreiche Post zu meinem Problem, aber keiner von ihnen für mich ausgearbeitet. Ich habe ein Fragment von wo ich startActivityForResult() auf einem Textview klicken muss. Von dort aus öffnet sich eine Aktivität, bei der der Benutzer einige Daten füllt und sie an die Datenbank sendet. Von dort muss ich eine Absicht übergeben, die den Ergebniscode enthält. Aber das onActivityResult() im Fragment wird nicht aufgerufen.Android: onActivityResult in Fragment nicht genannt

-Code von meinem Fragmente

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

-Code aus meiner Tätigkeit

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 in Fragmente:

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

Also, wie ich Absicht zurück zu senden mein f ragment mit Ergebniscode?

+0

sollten Sie in der Lage sein, eine Lösung für Ihr Problem zu finden [hier] [1] [1]: http://stackoverflow.com/questions/6147884/onactivityresult-not-being-called- In-Fragment – Exoit

+0

Danke, ich habe den Link schon besucht. Habe nicht gearbeitet – Nitish

+0

Obwohl ich etwas spät dran bin, aber so hat es bei mir funktioniert, implementiere das 'onActivityResult()' in der 'Activity' selbst, erhalte die' Intent'-Extras und übergebe sie an eine Methode von ' Fragment ", das relevante Daten zum Aktualisieren oder Abrufen von Daten verwendet. –

Antwort

19

Da wollte ich mein Fragment, das die Absicht abzufangen, damit ich LocalBroadcastManager verwendet.

In onCreate von Fragment, I definiert:

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

Mein Empfänger in Fragment:

private BroadcastReceiver mUpdateUIReceiver = new BroadcastReceiver() { 

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

Aktivitätscode, wird Broadcast senden:

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

Hoffe, es hilft jemand, steht vor demselben Problem.

+1

Ich finde dies eine sehr saubere Möglichkeit, Ergebnisse zu übergeben, wenn Fragmente und Childfragments verwendet werden. danke für den Vorschlag. – TrueCoke

+0

Danke für die sehr nützliche Antwort, die mein Problem gelöst hat! Ich musste auch etwas Text von einer anderen Aktivität zu einem Fragment senden, was einfach mit dem Hinzufügen von zusätzlichen Werten zur Absicht gemacht werden kann. – Micer

Verwandte Themen