jjzjj

android - 当我从图库中选择图片时,onCreate 在 onActivityResult 之后调用

coder 2023-11-30 原文

我有覆盖了“onActivityResult”的“SherlockFragmentActivity”。

我尝试从相机和图库中获取图像并进行裁剪。 问题是我在 onActivityResult 调用后返回了我的 Activity 而不是 fragment 。

...
            FragmentTransaction t = fragmentManager.beginTransaction();
            LogInFragment logFrag = new LogInFragment();
            t.replace(R.id.fragment_container, logFrag);
            t.commit();
...
     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
        }

Activity 布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/fragment_container"
                android:background="@color/textWhite"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

</RelativeLayout>

我也有“SherlockFragment”,我在其中选择了图像:

startImagePickerDialog(this);


public void startImagePickerDialog() {
        AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(getSherlockActivity());
        myAlertDialog.setTitle("Upload Pictures Option");
        myAlertDialog.setMessage("How do you want to set your picture?");

        myAlertDialog.setPositiveButton("Gallery", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
                Intent intent = new Intent();
                // call android default gallery
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                // ******** code for crop image
                intent.putExtra("crop", "true");
                intent.putExtra("aspectX", 1);
                intent.putExtra("aspectY", 1);
                intent.putExtra("outputX", 200);
                intent.putExtra("outputY", 200);
                intent.putExtra("noFaceDetection", true);
                try {
                    intent.putExtra("return-data", true);
                    startActivityForResult(Intent.createChooser(intent,
                            "Complete action using"), Const.GALLERY_PICTURE);
                } catch (ActivityNotFoundException e) {
                    Log.e(LOG_TAG, "ActivityNotFoundException");
                }
            }
        });
        myAlertDialog.setNegativeButton("Camera", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
                // call android default camera
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT,
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
                intent.putExtra("crop", "true");
                intent.putExtra("aspectX", 1);
                intent.putExtra("aspectY", 1);
                intent.putExtra("outputX", 200);
                intent.putExtra("outputY", 200);
                intent.putExtra("noFaceDetection", true);
                try {
                    intent.putExtra("return-data", true);
                    startActivityForResult(intent, Const.CAMERA_REQUEST);
                } catch (ActivityNotFoundException e) {
                    Log.e(LOG_TAG, "ActivityNotFoundException");
                }
            }
        });
        myAlertDialog.show();
    }

和“SherlockFragment”中的“onActivityResult”:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d(LOG_TAG, "onActivityResult");
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode != getSherlockActivity().RESULT_OK) {
            Log.e(LOG_TAG, "resultCode != RESULT_OK");
            return;
        }

        if (requestCode == Const.CAMERA_REQUEST) {
            Log.d(LOG_TAG, "requestCode == CAMERA_REQUEST");
            Bundle extras = data.getExtras();
            if (extras != null) {
                Log.d(LOG_TAG, "extras != null");
                Bitmap photo = extras.getParcelable("data");
                icon.setImageBitmap(photo);
            }
        }

        if (requestCode == Const.GALLERY_PICTURE) {
            Log.d(LOG_TAG, "requestCode == GALLERY_PICTURE");
            Bundle extras2 = data.getExtras();
            if (extras2 != null) {
                Log.d(LOG_TAG, "extras != null");
                Bitmap photo = extras2.getParcelable("data");
                icon.setImageBitmap(photo);
            }
        }
    }

更新 当我调用相机 Activity 时,我的主要 Activity 调用“onSaveInstanceState”,然后调用“onRestoreInstanceState”。这是一个原因吗?

最佳答案

  1. 检查您的“设置”->“开发者选项”->“不保留 Activity ”标志。
  2. 如果您的设备需要内存,这就是 android 的本质,它会破坏不可见的 Activity 。所以你必须考虑到你的 Activity 可以随时重新创建。顺便说一句,当您的设备需要内存并破坏您的后台 Activity 时,“不保留 Activity ”选项可以模拟您的应用程序。

关于android - 当我从图库中选择图片时,onCreate 在 onActivityResult 之后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19688897/

有关android - 当我从图库中选择图片时,onCreate 在 onActivityResult 之后调用的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby - 为什么当我调用类的实例方法时,初始化不显示为方法? - 2

    我正在写一篇关于在Ruby中几乎一切都是对象的博客文章,我试图通过以下示例来展示这一点:classCoolBeansattr_accessor:beansdefinitialize@bean=[]enddefcount_beans@beans.countendend所以从类中我们可以看出它有4个方法(当然,除非我错了):它可以在创建新实例时初始化一个默认的空bean数组它可以计算它有多少个bean它可以读取它有多少个bean(通过attr_accessor)它可以向空数组写入(或添加)更多bean(也通过attr_accessor)但是,当我询问类本身它有哪些实例方法时,我没有看到默认

  3. ruby - 如何从哈希中选择前 5 个值? - 2

    我有一个ids和他们的分数的散列,它是这样的:@objects={1=>57,4=>12,3=>9,5=>3,55=>47,32=>39,17=>27,29=>97,39=>58}我怎样才能选出前五名并放弃其余的?我这样做:@orderedObject=@objects.sort_by{|k,v|v}.reverse=>[[29,97],[39,58],[1,57],[55,47],[32,39],[17,27],[4,12],[3,9],[5,3]]然后我这样做:只有@orderedObjects的键:@keys=@orderedObject.map{|key,value|key}这

  4. arrays - 在一行中选择数组的第一个和最后一个元素 - 2

    我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,

  5. ruby-on-rails - 在 Rails 中,我从 Guard 那里收到这个错误,说我必须更新到新的 :cmd syntax - 2

    我刚刚更新了我的gem,当我尝试运行Guard时,出现以下错误:Guard::RSpecDEPRECATIONWARNING:The:clioptionisdeprecated.Pleasecustomizethenew:cmdoptiontofityourneed.这是我的Guard文件:guard'rspec',cli:'--drb'dowatch(%r{^spec/.+_spec\.rb$})watch(%r{^lib/(.+)\.rb$}){|m|"spec/lib/#{m[1]}_spec.rb"}watch('spec/spec_helper.rb'){"spec"}#Ra

  6. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

  7. ruby-on-rails - ActionController::UnknownFormat 当我使用 respond_to + respond_with (Rails 4) - 2

    我无法理解发生了什么,当我请求索引操作时,我收到了ActionController::UnknownFormat,甚至在views/products文件夹中存在一个index.js文件。任何人都可以帮我弄清楚我错过了什么?我正在使用Rails4和Ruby2.0.0-p247。classProductsController 最佳答案 您应该在请愿书上指定格式,即:获取:show,:user_id=>user_id,:format=>:json 关于ruby-on-rails-ActionC

  8. Ruby URI - 如何在 URL 之后获取完整路径 - 2

    给定以下内容,如何获取URL的完整路径uri=URI("http://foo.com/posts?id=30&limit=5#time=1305298413")我只想要posts?id=30&limit=5#time=1305298413我试过uri.path并返回/posts和ui.query返回'id=30&limit=5' 最佳答案 您要找的方法是request_uriuri.request_uri=>"/posts?id=30&limit=5"如果需要,您可以使用任何您想要删除前导/的方法。编辑:要获取#符号后的部分,请使用

  9. ruby - 如何在 ruby​​ watir 中选择下拉值选项? - 2

    这是我的下拉菜单,我想在它的值选项上选择它01-Liveanimals我知道如何选择下拉内容,即ie.select_list(:id,"DropDownList_Product").select("01-Liveanimals")实际上我想选择其值01的下拉菜单,我应该为此做什么? 最佳答案 像这样的东西应该可以工作:ie.select_list(:id,"DropDownList_Product").select_value("01")更多信息请访问http://rdoc.info/gems/watir-webdriver/Wat

  10. ruby-on-rails - 当我停止 rails server 时,我的 elasticsearch 索引会发生什么? - 2

    我对在Rails应用程序中使用Elasticsearch还很陌生,我正在使用耐嚼的gem来实现它。当我通过railss在开发模式下运行我的Rails应用程序时,我然后通过elasticsearch命令运行Elasticsearch并运行rakechewy:reset:all为我的数据创建索引。这样做一切正常,但如果我重新启动服务器,我必须再次运行rakechewy:reset:all命令以重建索引,否则我会收到错误消息。当我重新启动服务器时,索引会发生什么变化?服务器停止时是否销毁?我不是很熟悉Elasticsearch的功能,所以希望有人能对幕后发生的事情有所了解。

随机推荐