我的MainActivity
TabLayout
和ViewPager
。
TabLayout
有3个标签:Tab1,Tab2,Tab3。
在我的Tab2中,我要求用户激活GPS(这没关系)。关键是我开始等待结果代码或数据的意图:
status.startResolutionForResult((Activity) parentView.getContext(), REQUEST_CHECK_SETTINGS);
所以,如果我想在我的OnActivityResult
Tab2中拨打Fragment
,那么我应该在我的父母(MainActivity
)onActivityResult
中执行此类操作。
case ACTIVITY_RESULT_FROM_TAB2:{
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.main_fragment);
if(fragment != null){
((Tab2Fragment) fragment).onActivityResult(requestCode, resultCode, data);
}
}
但它返回强制转换异常(Tab3无法转换为Tab2),因为添加的最后一个片段是Tab3。如何正确地从Tab2调用OnActivityResult
?
答案 0 :(得分:0)
覆盖Tab2的onActivityResult
中的Fragment
功能而非活动,您将在那里接听电话。
要在您的片段中获得结果,请务必在片段中调用startActivityForResult(intent,111);
而不是getActivity().startActivityForResult(intent,111);
。
你可以这样做..
在Activity类中覆盖onActivityresult
并从那里调用Fragment
的函数并传递结果。
答案 1 :(得分:0)
由于您使用的是ViewPager,因此必须实施PagerAdapter。
所以你可以通过索引参考Tabrence Fragment。
以这种方式:
Fragment fragment = pagerAdapter.getItem(1);
试试这个
Tab2Fragment fragment= (Tab2Fragment) pagerAdapter.getItem(1);
fragment.onActivityResult(requestCode, resultCode, data);
答案 2 :(得分:0)
尝试这样做: 在视图寻呼机中将片段添加到列表中:
ArrayList<Fragment> fragment=new ArrayList<>();
public void addFragments(Fragment fragment,String titles)
{
this.fragment.add(fragment);
this.tabTitles.add(titles);
}
public Fragment getFragment(int position) {
return fragment.get(position);
}
call getFragmnet function from activity:
viewpagerAdapter.getFragmnet(viewpager.getcurrentIndex())