🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1916閲覧

Fragmentから別Fragment内のメソッドの使用方法

ToaZI

総合スコア39

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2021/02/18 05:17

編集2021/02/18 07:15

別フラグメント内にあるメソッドをフラグメントから使用したいのですが、
使い方がわかりません。
こちらのサイトを参考に作成してみたのですが
フラグメントからフラグメントの場合の記述方法がわかりません。

別フラグメント

メインアクティビティ

フラグメント(別メソッドを組み込みたい)

という流れでメソッドが動くという感じであっていますか?

ご教示いただければ幸いです。

MainActivity.java

1public class MainActivity extends AppCompatActivity { 2 3 //RYUKA ADD 4 //利用するパーミッション分設定 5 private final String[] REQUIRED_PERMISSIONS = 6 new String[]{"android.permission.CAMERA", 7 "android.permission.WRITE_EXTERNAL_STORAGE", 8 "android.permission.RECORD_AUDIO"}; 9 private int REQUEST_CODE_PERMISSIONS = 10; 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 BottomNavigationView navView = findViewById(R.id.nav_view); 16 // Passing each menu ID as a set of Ids because each 17 // menu should be considered as top level destinations. 18 AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( 19 R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications) 20 .build(); 21 NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); 22 NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); 23 NavigationUI.setupWithNavController(navView, navController); 24 //homefragment表示 25 addFragment(new HomeFragment()); 26 27 } 28 29 private void addFragment(Fragment fragment) { 30 FragmentManager manager = getSupportFragmentManager(); 31 FragmentTransaction transaction = manager.beginTransaction(); 32 transaction.add(R.id.nav_host_fragment, fragment); 33 transaction.commit(); 34 } 35 36 37}

HomeFragment.java

1public class HomeFragment extends Fragment { 2 3 private Button st_button; 4 int go = 0; 5 Random rand = new Random(); 6 int SetTime = 7000; 7 SoundPool soundPool; // 効果音を鳴らす本体(コンポ) 8 int mp1; // 効果音データ(mp3) 9 int mp2; // 効果音データ(mp3) 10 int mp3; // 効果音データ(mp3) 11 12 13 14 15 16 public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 17 18 View view = inflater.inflate(R.layout.fragment_home, container, false); 19 20 return view; 21 } 22 23 24 public void onViewCreated(final View view, Bundle savedInstanceState) { 25 super.onViewCreated(view, savedInstanceState); 26 st_button = view.findViewById(R.id.button); 27 st_button.setOnClickListener(new View.OnClickListener() { 28 @Override 29 public void onClick(View view) { 30 31 replaceFragment(new DashboardFragment()); 32 String str = String.valueOf(num); 33 //ここにVideoFragmentのStartrecoadingを入れたい 34 } 35 }); 36 37 38 39 private void replaceFragment(Fragment fragment) { 40 // フラグメントマネージャーの取得 41 FragmentManager manager = getFragmentManager(); 42 FragmentTransaction transaction = manager.beginTransaction(); 43 transaction.replace(R.id.container, fragment); 44 transaction.addToBackStack(null); 45 transaction.commit(); 46 } 47 48 49}

DashboredFragment.java

1public class DashboardFragment extends Fragment { 2 3 //RYUKA ADD 4 private VideoFragment camera2; 5 6 public View onCreateView(@NonNull LayoutInflater inflater, 7 ViewGroup container, Bundle savedInstanceState) { 8 9 View root = inflater.inflate(R.layout.fragment_dashboard, container, false); 10 11 12 13 //カメラフラグメントの生成&当フラグメントの子フラグメントとして起動 14 if (null == savedInstanceState) { 15 //カメラフラグメント生成 16 camera2 = VideoFragment.newInstance(); 17 FragmentManager fragMan = getFragmentManager(); 18 FragmentTransaction fragTransaction = fragMan.beginTransaction(); 19 fragTransaction.add(R.id.container, camera2); 20 fragTransaction.commit(); 21 getChildFragmentManager().beginTransaction().add(R.id.container, camera2).commit(); 22 } 23 return root; 24 } 25 26 27}

VideoFragment.java

1public class VideoFragment extends Fragment { 2 3rivate TextureView.SurfaceTextureListener mSurfaceTextureListener = new TextureView.SurfaceTextureListener() { 4 @Override 5 public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, 6 int width, int height) { 7 openCamera(width, height); 8 } 9 @Override 10 public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, 11 int width, int height) { 12 configureTransform(width, height); 13 } 14 @Override 15 public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { 16 return true; 17 } 18 @Override 19 public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { 20 } 21 }; 22 private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { 23 @Override 24 public void onOpened(@NonNull CameraDevice cameraDevice) { 25 mCameraDevice = cameraDevice; 26 startPreview(); 27 mCameraOpenCloseLock.release(); 28 if (null != mTextureView) { 29 configureTransform(mTextureView.getWidth(), mTextureView.getHeight()); 30 } 31 } 32 33 @Override 34 public void onDisconnected(@NonNull CameraDevice cameraDevice) { 35 mCameraOpenCloseLock.release(); 36 cameraDevice.close(); 37 mCameraDevice = null; 38 } 39 40 @Override 41 public void onError(@NonNull CameraDevice cameraDevice, int error) { 42 mCameraOpenCloseLock.release(); 43 cameraDevice.close(); 44 mCameraDevice = null; 45 Activity activity = getActivity(); 46 if (null != activity) { 47 activity.finish(); 48 } 49 } 50 51 }; 52 public static VideoFragment newInstance() { 53 return new VideoFragment(); 54 } 55撮影動画のアスペクト比を指定(3*4) 56プレビューサイズの設定 57View生成時処理 58View生成完了時処理 59復帰時処理 60終了時処理 61バックグラウンド処理の開始 62バックグラウンド処理の終了 63カメラの起動 64カメラの終了 65プレビュー画面の開始 66プレビュー画面の更新 67プレビューのサイズを元に動画の回転情報を指定 68MediaRecorder関連の初期設定処理 69保存先情報とファイル名の設定 70 */ 71 72 73 public void startRecordingVideo() { 74 if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) { 75 return; 76 } 77 try { 78 closePreviewSession(); 79 setUpMediaRecorder(); 80 SurfaceTexture texture = mTextureView.getSurfaceTexture(); 81 assert texture != null; 82 texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 83 mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); 84 List<Surface> surfaces = new ArrayList<>(); 85 86 //プレビュー画面の設定 87 Surface previewSurface = new Surface(texture); 88 surfaces.add(previewSurface); 89 mPreviewBuilder.addTarget(previewSurface); 90 91 //メディアレコーダー(録画処理)のセット 92 Surface recorderSurface = mMediaRecorder.getSurface(); 93 surfaces.add(recorderSurface); 94 mPreviewBuilder.addTarget(recorderSurface); 95 96 //セッションの開始 97 mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { 98 99 @Override 100 public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 101 mPreviewSession = cameraCaptureSession; 102 updatePreview(); 103 getActivity().runOnUiThread(new Runnable() { 104 @Override 105 public void run() { 106 //録画開始 107 mMediaRecorder.start(); 108 } 109 }); 110 } 111 112 @Override 113 public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { 114 Activity activity = getActivity(); 115 if (null != activity) { 116 Toast.makeText(activity, "Failed", Toast.LENGTH_SHORT).show(); 117 } 118 } 119 }, mBackgroundHandler); 120 } catch (CameraAccessException | IOException e) { 121 e.printStackTrace(); 122 } 123 124 } 125 126 private void closePreviewSession() { 127 if (mPreviewSession != null) { 128 mPreviewSession.close(); 129 mPreviewSession = null; 130 } 131 } 132}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/02/18 06:41

難しいテーマですね。その 2 つのフラグメントは画面上に同時に存在するのでしょうか? また、使用したいメソッドはどのようなものですか? (一般的には、フラグメントやアクティビティが直接やり取りするのはあまり好ましくなくて、ViewModel などを介して共通のデータを変更すると両方の表示が更新される、というのがいいのですが…。)
ToaZI

2021/02/18 06:47

ありがとうございます。 フラグメントA(ボタンが配置されている)内のボタンを押した際に フラグメントB(カメラプレビュー・撮影等)内にあるビデオの録画スタートメソッドと画面推移を行いたいです。 アプリ全体としてはタイム計測をカメラを使って行うアプリでフラグメントAで号令を出して フラグメントBで録画するという形です。
hoshi-takanori

2021/02/18 06:56

フラグメント A, B はずっと画面上に存在する感じでしょうか? でも画面推移があるってことは違うのかな…。 Activity 経由で findFragmentByTag とかで目的のフラグメントを取得して呼べば良いと思いますけど。 (でも、実際にフラグメトを配置しているあたりのコードとかを見てみないと何とも言えませんね。)
ToaZI

2021/02/18 06:59

ABは画面上には存在していません。 順番に切り替わる形になっています。 コードは追記させていただきます。
hoshi-takanori

2021/02/18 07:38

ソース拝見しましたが、Android Studio の Bottom Navigation のテンプレートで作られたものですね。しかも Navigation Components が使われているようなので、自分で fragment transaction しなくても、navigation graph を使って画面遷移することができますので、その方がおすすめです。 https://developer.android.com/guide/navigation?hl=ja フラグメント A から B に遷移した際に、A での状態 (どのボタンが押されたか、など) に応じて B での処理を切り替えたいという話であれば、A から B にデータを渡すことができますので、それを使うと良いのでは。 https://developer.android.com/guide/navigation/navigation-navigate?hl=ja
ToaZI

2021/02/18 09:50

ありがとうございます。 一度試してみます。
guest

回答1

0

自己解決

フラグメントから別フラグメントのメソッド使用については不可能と判断したため、bundleを使いボタンクリック時に値を入力し、別フラグメントで値によってif文で処理を変えました。

またnavigation graphも使用し画面遷移の仕方も変更しました。

投稿2021/02/24 10:05

ToaZI

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問