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