onActivityResult n'appelle pas le fragment
La structure de l'application est comme ceci:
tabHost (in Activity) -> contains -> TabFragment(extend base container fragment)
1. Le code de l'Activité:
tabHost.addTab(
tabHost.newTabSpec("home").setIndicator("",
getResources().getDrawable(R.drawable.btn_home)),
HomeFragment.class, null);
2. Le code de la HomeFragment
(Notez que HomeFragment n'est pas la fonction elle-même, mais un conteneur comme ça, et d'étendre BaseContainerFragment):
public class HomeFragment extends BaseContainerFragment {
public Home homeFrag;
private boolean mIsViewInited;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.container_fragment, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (!mIsViewInited) {
mIsViewInited = true;
initView();
}
}
private void initView() {
homeFrag = new Home();
replaceFragment(homeFrag, false);
}
}
3. BaseContainerFragment
public class BaseContainerFragment extends Fragment {
public void replaceFragment(Fragment fragment, boolean addToBackStack) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.replace(R.id.container_framelayout, fragment);
transaction.commit();
}
public boolean popFragment() {
boolean isPop = false;
if (getChildFragmentManager().getBackStackEntryCount() > 0) {
isPop = true;
getChildFragmentManager().popBackStack();
}
return isPop;
}
}
4. Dans la Maison (Le contenu réel du fragment)
UploadType fragment = new UploadType();
Bundle bundle = new Bundle();
bundle.putString("form_type", "request");
fragment.setArguments(bundle);
((BaseContainerFragment)getParentFragment()).replaceFragment(fragment, true);
5. Et dans le UploadType , j'appelle l'activité de la caméra, mais onActivityResult est seulement de retour à l'activité principale.
startActivityForResult(intent, REQUEST_CAMERA);
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("test1", "result2");
super.onActivityResult(requestCode, resultCode, data);
}
Comment puis-je déclencher la onActivityResult à UploadType? Merci pour l'aide.
source d'informationauteur user782104
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle cela ne fonctionne pas c'est parce que vous appelez
startActivityForResult()
à partir de l'intérieur d'un ensemble de fragment. Android est assez intelligent pour acheminer le résultat d'uneActivity
et même unFragment
mais pas à un imbriquéeFragment
c'est pourquoi vous n'obtenez pas la fonction de rappel.(plus d'informations à pourquoi cela ne fonctionne pas ici ou sur stackoverflow)
Maintenant pour le faire fonctionner, je vous suggère d'envoyer manuellement le rappel à la
ChildFragment
(=UploadType
) dans leParentFragment
(=BaseContainerFragment
):Dans mon cas, j'ai réalisé en ajoutant le code suivant dans mon
MainActivity.java
Dans votre Activité Remplacer onActivityForResult() comme ceci
Maintenant dans votre fragment u peut obtenir le résultat de l'activité à l'intérieur de ce
Assurez-vous que lorsque vous appelez commencer ActivityForResult dans votre frragment il devrait en être ainsi
TabActivity->ActivityA->FragmentB, il n'est pas du travail.
utiliser un mauvais mauvais mauvais moyen:
ActivityA.java
FragmentB.java