I have an app which uses Tab navigation, a ViewPager, and ActionBarSherlock. In one of my fragments I get a photo using an intent but onActivityResult
is called in the MainActivity and not the fragment. I want to get the fragment in MainActivity's onActivityResult
and then call the fragments onActivityResult
.
I've been trying all night but I cannot figure out how to get the fragment.
Basically I want to do something like this but I cannot get the fragment:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Fragment fragment = (Fragment) getSupportFragmentManager().findFragmentByTag("fragment");
if(fragment != null){
fragment.onActivityResult(requestCode, resultCode, data);
}
}
Edit:
TabsAdapter
public class TabsAdapter extends FragmentStatePagerAdapter implements ActionBar.TabListener , ViewPager.OnPageChangeListener{
private final Context mContext;
private final ActionBar mActionBar;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
private final String TAG = "21st Polling:";
static final class TabInfo{
private final Class<?> clss;
private final Bundle args;
TabInfo(Class<?> _class, Bundle _args){
clss = _class;
args = _args;
}
}
public TabsAdapter(SherlockFragmentActivity fa, ViewPager pager) {
super(fa.getSupportFragmentManager());
mContext = fa;
mActionBar = fa.getSupportActionBar();
mViewPager = pager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}
public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args){
TabInfo info = new TabInfo(clss, args);
tab.setTag(info);
tab.setTabListener(this);
mTabs.add(info);
mActionBar.addTab(tab);
notifyDataSetChanged();
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mActionBar.setSelectedNavigationItem(position);
}
public void onTabSelected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
Log.v(TAG, "clicked");
Object tag = tab.getTag();
for (int i = 0; i<mTabs.size(); i++){
if (mTabs.get(i) == tag){
mViewPager.setCurrentItem(i);
}
}
}
public void onTabUnselected(Tab tab, android.support.v4.app.FragmentTransaction ft) {
}
public void onTabReselected(Tab tab, android.support.v4.app.FragmentTransaction ft) {
}
@Override
public android.support.v4.app.Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return android.support.v4.app.Fragment.instantiate(mContext, info.clss.getName(), info.args);
}
@Override
public int getCount() {
return mTabs.size();
}
}
The method onActivityResult
will be called in both MainActivity and fragment, so you don't need to get the fragment. You must use different RequestCode for getting photo in the method startActivityForResult()
and Make sure not to consume that RequestCode in MainActivity.