2014-11-06 54 views
0

我使用startActivityForResult调用片段中的活动,但是onActivityResult永远不会被回调。我已经寻找可能的解决方案,包括从清单中移除SingleTask,SingleInstance,NoHistory,但目前为止没有任何工作。onActivityResult中的片段永远不会被调用

这是被叫片段:

public class PickUpButtonFragment extends Fragment { 
.... 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_pick_up_button, container, 
       false); 

     ... 
     pickUpButton = (Button) view.findViewById(R.id.pickUpButton); 
     pickUpButton.setOnClickListener(new OnPickupClickListener()); 
... 
     return view; 
    } 
.... 
    private class OnPickupClickListener implements OnClickListener { 
     @Override 
     public void onClick(View view) { 
      Intent qrCodeActivityIntent = new Intent(getActivity(), QrCodeActivity.class); 
      startActivityForResult(qrCodeActivityIntent, 20); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // Check which request we're responding to 
     if (requestCode == 20) { 
      qrCodeValue = data.getStringExtra(QrCodeActivity.QR_CODE_FLAG); 
      requestDeviceLocation(); 
     } 
    } 
... 
} 

片段被包含在其中我推翻了onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
} 

这是活动是如何在清单中声明的​​活动:

<activity 
    android:name=".activity.GMapActivity" 
    android:label="@string/map_title" 
    > 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 

    <meta-data 
     android:name="android.app.searchable" 
     android:resource="@xml/searchable" /> 
</activity> 

被调用的活动有一个setResult方法:

public class QrCodeActivity extends Activity { 

... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_qr_code); 
..... 
     initPickUpRequestButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent data = new Intent(); 
       data.putExtra(QR_CODE_FLAG, qrCodeValue); 
       setResult(RESULT_OK,data); 
      } 
     }); 

... 
    } 
.... 
} 

这就是所谓的活动是如何在清单中声明:

<activity 
    android:name=".activity.QrCodeActivity" 
    android:label="@string/qr_code_title" 
    > 
</activity> 

的setResult被调用,但onActivtyResult从不叫回来,无论是在父活动,并在片段。

我正在用4.1.2构建。

+0

'setResult' then'finish()'... – StoneBird 2014-11-06 16:08:14

回答

1

您需要致电finish()才能在您的setResult()之后结束您的活动,以便任何来电者收到结果。

如果你只想发回消息给调用者而不终止这个活动,那么你可能想要使用回调模式或广播。

相关问题