<やりたいこと>
・ImageView内をタップするとギャラリーから選択するか写真を撮るかをDialogで表示します。
・ギャラリーを選んだ場合、ギャラリー画面を表示して選ばれた写真をImageView内に表示します。
・写真を選んだ場合、カメラを起動し、撮影・保存すると撮った写真をImageView内に表示します。
これを1つの共通クラスにして、2つのActivityから呼び出したい。
<出来たこと>
〇 FragmentおよびActivity内に以下をコーディングして、動作することは確認
Java
1--Fragment 2public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 3 ImageView iv_picture = frgGrowthloghd.findViewById(R.id.relativelayout_picture) ; 4 iv_picture .setOnClickListener(new View.OnClickListener() { 5 @Override 6 public void onClick(View v) { 7 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) ; 8 builder.setItems(new CharSequence[]{"ギャラリーから選択する", "写真を撮る", "キャンセル")}, new DialogInterface.OnClickListener() { 9 @Override 10 public void onClick(DialogInterface dialog, int which) { 11 if( which == 0 ) { 12 // ギャラリーを表示する 13 Intent intent = new Intent() ; 14 intent.setAction(Intent.ACTION_GET_CONTENT) ; 15 intent.setType("image/*") ; 16 startActivityForResult(intent, REQUEST_GALLERY); 17 } 18 else if( which == 1 ) { 19 // カメラの使用許可を確認する 20 if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 21 // カメラ使用の許可を得る 22 ActivityCompat.requestPermissions(getActivity(), new String[] {Manifest.permission.CAMERA}, REQUEST_GRANTED_CAMEARA_CODE); 23 } 24 else { 25 // カメラを起動する 26 Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE) ; 27 if(intentCamera.resolveActivity(getActivity().getPackageManager()) != null) { 28 startActivityForResult(intentCamera, REQUEST_CAMERA); 29 } 30 } 31 } 32 else { 33 // 元の画面に戻る 34 } 35 } 36 }) ; 37 // ダイアログボックスを生成して表示する 38 AlertDialog alertDialog = builder.create() ; 39 alertDialog.show() ; 40 } 41 }); 42} 43 44@Override 45public void onActivityResult(int requestCode, int resultCode, Intent data) { 46 super.onActivityResult(requestCode, resultCode, data); 47 48 // 写真を撮った後 49 if (requestCode == REQUEST_GALLERY) { 50 } 51 52 // 写真を撮った後 53 if (requestCode == REQUEST_CAMERA) { 54 } 55} 56
<困っていること>
-- Fragment部分のコードを共通クラス化して、2つのFragmentから呼び出したい。
ただ、「startActivityForResult」はComponentActivityかFragmentをextendsしないと使用できないようで、クラス内から呼び出すことが出来ない。
同じコードを2つのFragmentに記述するのは保守性の観点からいかがなものかと思い、共通化を検討しています。
いい方法が思い浮かばず、お知恵を拝借したく。
そもそも、出来ないことであれば2つのFragmentに同じコードを記述したいと思います。
以上、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/14 09:03