未从片段调用 onActivityResult
Posted
技术标签:
【中文标题】未从片段调用 onActivityResult【英文标题】:onActivityResult not called from fragment 【发布时间】:2019-12-05 08:47:44 【问题描述】:我有一个包含BottomNavigationView
和NavHostFragment
的活动。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
bottomNavigationView.setSelectedItemId(R.id.navigation_profile);
NavController navController = Navigation.findNavController(this, R.id.myNavHostFragment);
NavigationUI.setupWithNavController(bottomNavigationView, navController);
我还在这个父活动中添加了onActivityResult
方法。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(this,"Parent onActivity",Toast.LENGTH_SHORT).show();
for (Fragment fragment : getSupportFragmentManager().getFragments())
fragment.onActivityResult(requestCode, resultCode, data);
在片段中,我有一个ImageView
,我在其中使用 Intent 从用户那里挑选图像。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
this.startActivityForResult(Intent.createChooser(intent, "Complete action using"), RC_PHOTO_PICKER);
在片段的onActivityResult
我正在这样做:
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
Toast.makeText(getActivity(),"OnActivityResult",Toast.LENGTH_SHORT).show();
// Result returned from launching the Intent to select image for profile
if (requestCode == RC_PHOTO_PICKER && resultCode == Activity.RESULT_OK)
Toast.makeText(getActivity(),"Called",Toast.LENGTH_SHORT).show();
问题是onActivityResult
既没有在父活动中调用,也没有在片段中调用。
我尝试了Answer1、Answer2、Answer3 中提供的各种解决方案。 但它们都不起作用!
【问题讨论】:
RC_PHOTO_PICKER
的值是多少? this
中的 this.startActivityForResult
是你的 Fragment 吗?
RC_PHOTO_PICKER
的@ianhanniballake 值为 2,定义为常量,this
指的是片段
您能否在 androidManifest.xml 中为您的活动包含该条目?
里面什么都没有:<activity android:name=".FirstScreen" />
您是否在清单中使用任何其他活动?特别是在清单条目中使用android:launchMode
的任何人?
【参考方案1】:
您不能将 Intent.createChooser()
与 Intent.GET_CONTENT
一起使用 - 对于活动和片段都是如此。
相反,只需将您的 Intent 直接与 startActivityForResult
一起使用。
【讨论】:
我从 udacity 课程中得到了这个代码:Firebase in a Weekend
:Link。让我试试你的建议。
仍然无法解决问题。甚至没有在父活动中调用:(
其他活动是否开始?
onCreate
仅在包含 navHostFragment
的父活动中调用
不,我的意思是在您调用startActivityForResult
后,屏幕上会出现GET_CONTENT
活动吗?【参考方案2】:
将以下代码块添加到父 onActivityResult
for (Fragment fragment : getSupportFragmentManager().getFragments())
//send result to all child fragment
if(fragment!=this)
fragment.onActivityResult(requestCode, resultCode, data);
【讨论】:
我在父活动中也使用了Toast
,它没有被调用【参考方案3】:
不太确定,但是否可能是片段正在调用意图?您能否尝试在单击 imageView 或按钮时使用侦听器,然后拦截它并从父 Activity 调用 Intent?
【讨论】:
以上是关于未从片段调用 onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章
Android ViewModel 未从 BackStackEntry 获取选定项
未从 IntentService 调用 onLocationChanged
未从自定义 uitableviewcell 调用 prepareForSegue
iOS locationmanager didChangeAuthorizationStatus 未从 kCLAuthorizationStatusDenied 调用到 kCLAuthorizatio