繁体   English   中英

对话框中的Android onActivityResult

[英]Android onActivityResult in dialog

通过单击MainActivity中Fragment( TrainerSettings )中的按钮打开DialogFragment( SettingsBackImageDialog )。 SettingsBackImageDialog有一些按钮,其中一个用于拍摄照片并将其设置为Fragment中的Imageview( trainersettingsmainicon )。

我在TrainerSettings打开SettingsBackImageDialog

    public void onViewCreated (View view, Bundle savedInstanceState) {    
            view.findViewById(R.id.trainersettingsbackgroundbtn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    showEditbackImageDialog();
                }
            });
        }

private void showEditbackImageDialog() {
        android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager();
        SettingsBackImageDialog settingsBackImageDialog = SettingsBackImageDialog.newInstance("Wybierz pierwszy kolor");
        settingsBackImageDialog.show(fm, "SettingsBackImageDialog");
    }

我在SettingsBackImageDialog中的代码是:

    public class SettingsBackImageDialog extends DialogFragment {

        int REQUESTCODE=1;

        public SettingsBackImageDialog() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            return inflater.inflate(R.layout.settingsbackgroundimgdialog, container);
        }

        @Override
        public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);

            view.findViewById(R.id.takephotobtn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(i, REQUESTCODE);
                }
            });

            String title = getArguments().getString("txt", "txt");
            getDialog().setTitle(title);
            getDialog().getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        }


        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            Toast.makeText(getActivity(), "before", Toast.LENGTH_LONG).show();
            if(requestCode==REQUESTCODE & resultCode== Activity.RESULT_OK){
                Bundle bundle = new Bundle();
                bundle = data.getExtras();
                Bitmap bitmap = (Bitmap)bundle.get("data");
                ImageView img = (ImageView) getActivity().findViewById(R.id.trainersettingsmainicon);
                img.setImageBitmap(bitmap);
                Toast.makeText(getActivity(), "in", Toast.LENGTH_LONG).show();
            }
        }

    }

MainActivity

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.MainContainer);
    fragment.onActivityResult(requestCode, resultCode, data);
    Toast.makeText(getApplicationContext(), "im here", LENGTH_SHORT).show();
}

应用程序打开相机,我可以采取piture并“接受”它,但没有其他事情发生。 可能应用程序从不使用onActivityResult方法(我尝试在此方法中编写一些消息,但没有任何事情发生)。

在AndroidMonitor中:

05-09 02:43:50.299 9709-10068/com.hgyghyfghyu.apkana40 W/GooglePlayServicesUtil: Google Play services out of date.  Requires 8115000 but found 5089070
05-09 02:43:50.339 9709-9709/com.hgyghyfghyu.apkana40 W/EGL_emulation: eglSurfaceAttrib not implemented

我用nox app来模仿android手机。

我该怎么做才能解决我的问题?

所选择的答案在这里正好解决您的问题。 您还需要检查此答案该答案解决了应该在何处处理onActivityResult的问题。 我的建议是你改变你的代码如下:

@Override
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
   super.onViewCreated(view, savedInstanceState);
   view.findViewById(R.id.takephotobtn).setOnClickListener(new  View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //changed getActivity().startActivityForResult(i, REQUESTCODE); to:
                startActivityForResult(i, REQUESTCODE);
            }
        });

        String title = getArguments().getString("txt", "txt");
        getDialog().setTitle(title);
        getDialog().getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    }

onActivityResult()将首先在Activity上调用。 之后,如果您在Activity中调用super.onActivityResult() ,它将与Fragments 因此,您需要在Activity添加onActivityResult回调 - 以便可以调用Fragment那个。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
}

完成后,将调用Fragment上的onActivityResult ,并按预期执行代码。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUESTCODE & resultCode== Activity.RESULT_OK){
        Bundle bundle = new Bundle();
        bundle = data.getExtras();
        Bitmap bitmap = (Bitmap)bundle.get("data");
        ImageView img = (ImageView) getActivity().findViewById(R.id.trainersettingsmainicon);
        img.setImageBitmap(bitmap);
    }
}

你需要看看这两个密切相关的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM