托管此片段的活动onActivityResult在相机活动返回时调用.
我的片段开始一个结果的活动,其意图是发送给相机拍照.图片应用程序加载正常,拍照并返回.该onActivityResult然而,永远不会打.我设置了断点,但没有触发任何东西.一个片段可以onActivityResult吗?我想是因为它是一个提供的功能.为什么不被触发?
ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image);
myImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 1888);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if( requestCode == 1888 ) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo);
}
}
Run Code Online (Sandbox Code Playgroud) 应用程序的结构如下:
tabHost (in Activity) -> contains -> TabFragment(extend base container fragment)
Run Code Online (Sandbox Code Playgroud)
1.活动中的代码:
tabHost.addTab(
tabHost.newTabSpec("home").setIndicator("",
getResources().getDrawable(R.drawable.btn_home)),
HomeFragment.class, null);
Run Code Online (Sandbox Code Playgroud)
2. HomeFragment中的代码 (注意HomeFragment不是实际的函数,而是像这样的容器,它扩展了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);
}
}
Run Code Online (Sandbox Code Playgroud)
3. BaseContainerFragment
public class BaseContainerFragment …Run Code Online (Sandbox Code Playgroud) android android-tabhost android-fragments android-activity onactivityresult
我在Fragment中工作,我需要从库中选择一个图像并将其设置为imageView但getActivity().startActivityForResult()现在正在工作
我已经检查了很多链接但是所有人都说在父活动中调用这个方法,但我没有任何父活动,因为这个片段在另一个片段内.我也检查了这个链接
startActivityForResult在Fragment中不起作用
这是我的代码: -
MainActivity类: -
public class SabaKuchHomeActivity extends FragmentActivity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;
private ArrayList<NavDrawerItem> navDrawerItems=new ArrayList<NavDrawerItem>();
private NavDrawerListAdapter adapter;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity);
mTitle = mDrawerTitle = getTitle();
// load slide menu items …Run Code Online (Sandbox Code Playgroud) 从Fragment Class中的Gallery中选择Image不起作用.
我尝试了更多的堆栈代码.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY_INTENT_CALLED);
} else {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, GALLERY_KITKAT_INTENT_CALLED);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
以上代码适用于Activity Class.不适用于Pure Fragment Class.
我在下面创建了一个简单的应用程序
MainActivity -> ContainerFragment -> MainFragment
ContainerFragment 使用 replace提交 MainFragment。
我打开不保持活动`
当 MainFragment 调用startActivityForResult并从活动返回时,onActivityResult不会调用 。
这不会发生
- 它是单个 Fragment。(不嵌套)
Don't Keep Activity已关闭- 当 ContainerFragment 用于
add提交 MainFragment 时。
要复制该问题,请下载以下 github 中的代码并运行它。(记得开启Don't Keep Activity)。单击Start Activity..,然后单击End Activity并期待 Toast(没有 Toast,表示onActivityResultfragment中的没有被调用)
https://github.com/elye/issue_android_onactivityresult_not_call
显然之前有一个报告的嵌套片段无法onActivityResult过去,如/sf/answers/2536760551/ 中发布的那样,但声明已在 Android 支持库 23.2.1 中解决。但就我而言,我尝试了 Android Support Library 28 (Android Pie)。所以我相信这仍然是一个有效的问题。
如果我错了,请在此处分享,并且对此有一些解释。
万一解决方法,https://inthecheesefactory.com/blog/how-to-fix-nested-fragment-onactivityresult-issue/en 中推荐了一个。
/sf/answers/1438027181/ 中报告的另一种解决方法