onActivityResult никогда не вызывался в Activity части ActivityGroup

#android

#Android

Вопрос:

Я использую TabActivity, который вызывает ActivityGroup . Типичный подход, который создает проблемы.

Теперь я столкнулся с проблемой с 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 никогда не вызывается.

Ответ №1:

Вы должны прослушать результат в onActivityResult() ActivityGroup. Когда получен результат, вы должны решить, какое действие должно его получить, и вызвать его метод onActivityResult() с полученными значениями.

Комментарии:

1. да, мне не только пришлось поместить onActivityResult в класс ActivityGroup, но и вызвать MyActivity.this.startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); … Новое действие должно быть запущено родительским для правильной работы.

2. Да, это то, что я улучшил, когда написал «отправить его» 🙂

Ответ №2:

Недавно я столкнулся с этим, чтобы объединить ответ Andras и virtual82 и обсуждение выше (извините, я не могу добавить комментарий из-за моей низкой репутации):

Если ваша activity запускается внутри ActivityGroup, которая используется, например, TabActivity , то только ActivityGroup activity может получать вызовы метода onActivityResult при запуске activity с помощью startActivityForResult(Intent intent, int requestCode) из activity внутри ActivityGroup .

В моей ситуации у меня есть TabActivity, который содержит FragmentActivitys. Фрагмент внутри FragmentActivity может запустить действие для результата. В этом случае фрагмент должен начать действие с 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);  
  

Затем в onActivityResult TabActivity передайте результат обратно во фрагмент.

 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, но ограничение по времени моего проекта не позволило мне достаточно времени для полного обновления.
Надеюсь, этот пост поможет кому-то в этой ситуации, вместо обычного ответа типа «не делай этого», который вы видите еще где.