onActivityResult从未在ActivityGroup的Activity部分中调用

时间:2011-10-22 05:39:19

标签: android

我正在使用调用ActivityGroup的TabActivity。带来问题的典型方法。

现在我遇到了onActivityResult的问题

在我的活动中我有..

public class MyActivity extends Activity {


@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.place_buttontab_community_media);

        Button ButtonClick =(Button) findViewById(R.id.addPicture);
 ButtonClick.setOnClickListener(new OnClickListener (){
            @Override
            public void onClick(View view)
            {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                // request code

                startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

            }
        });

}

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.i(TAG, "hi");
        super.onActivityResult(requestCode, resultCode, data);
    }

}

遗憾的是,永远不会调用onActivityResult。

2 个答案:

答案 0 :(得分:1)

您应该在ActivityGroup的onActivityResult()中监听结果。收到结果后,您必须决定应该接收哪个活动,并使用收到的值调用onActivityResult()方法。

答案 1 :(得分:1)

我最近遇到了这个,要巩固Andras'和virtual82的回答和讨论(抱歉,由于我的低代表,我无法添加评论):

如果您的活动是在TabActivity使用的ActivityGroup内启动的,那么当您从内部活动启动具有startActivityForResult(Intent intent,int requestCode)的活动时,只有ActivityGroup活动可以接收对onActivityResult的方法调用。的ActivityGroup。

在我的情况下,我有一个包含FragmentActivitys的TabActivity。 FragmentActivity中的片段可以为结果启动活动。 在这种情况下,Fragment需要以TabActivity作为调用活动来启动活动:

Intent doSomethingIntent = new Intent();
//getActivity() returns the FragmentActivity, so we need to get the TabActivity with getParent()
Activity tabActivity = getActivity().getParent();
doSomethingIntent .setClass(tabActivity , PostCommentActivity.class);
tabActivity.startActivityForResult(doSomethingIntent , DO_SOMETHING_REQ_CODE);  

然后在TabActivity的onActivityResult中,将结果传递回Fragment。

Activity currentActivity = getLocalActivityManager().getCurrentActivity();
//get the FragmentActivity in order to get the Fragment instance
if(currentActivity instanceof FragmentActivity){
    FragmentActivity currentFragmentActivity  = (FragmentActivity)currentActivity ;
    //R.id.l_container is the layout/viewgroup that contains the Fragment
    Fragment currentFragment = currentFragmentActivity.getSupportFragmentManager().findFragmentById(R.id.l_container);
    if(currentFragment != null){
        //pass result to the Fragment!
        frag.onActivityResult(requestCode, resultCode, data);
    }
}

我意识到不推荐使用ActivityGroup,TabActivity和LocalActivityManager来支持Fragment和FragmentManager,但是我的项目时间限制让我没有足够的时间来完全升级。 希望这篇文章可以帮助处于这种情况的人,而不是通常的“不要做”的回应,你会看到其他地方。