質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Android

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

Q&A

解決済

1回答

1894閲覧

fragment同士の値の受け渡し(android.java)

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Android

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

0グッド

0クリップ

投稿2019/11/20 01:20

編集2019/11/20 03:36

前提・実現したいこと

Java の理解度がすごく低く質問内容も足らないことばかりかと思いますが
教えていただけたらと思います。

fragment1 と MainActivity の二つは自動で作成されていたもので
fragment2 は自分で作成したものです
fragment1 と fragment2 を使用しており MainActivity の方は放置状態です。

fragment1 には ボタン1つ と テキストビュー1つ のみの配置
fragment2 には エディットテキスト3つ ボタン1つ の配置となっております

fragment1 のボタンが押されたときにfragment2 が開く
fragment2 のエディットテキストに入力されたテキストを
fragment2 のボタンが押されたときに
fragment1 の方へ渡して fragment1のテキストビューで表示させたい

といったところです

今の段階で実現できているのは
fragment1 のボタンが押されたときにfragment2 が開く
ここのみです

エディットテキストに入力した後
ボタンを押すと問題が発生したため終了しますと表示されます

よろしくお願いいたします

発生している問題・エラーメッセージ

こちらを記入できればいいのですがLogCatを見てもどれがエラーなのか分からず申し訳ありません

該当のソースコード

fragment1.java

java

1 2public class MainFragment extends Fragment { 3 4 public static final String Gtai12 = "person_id"; 5 //public static final String EXTRA_MODE_ID = "mode_id"; 6 7 8 fragment2 fragment02 = new fragment2(); 9 10 11 private MainViewModel mViewModel; 12 13 public static MainFragment newInstance() { 14 return new MainFragment(); 15 } 16 17 @Nullable 18 @Override 19 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, 20 @Nullable Bundle savedInstanceState) { 21 return inflater.inflate(R.layout.main_fragment, container, false); 22 } 23 24 @Override 25 public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { 26 super.onViewCreated(view, savedInstanceState); 27 28 29 30 Bundle args = getArguments(); 31 32 Button button01 = view.findViewById(R.id.button); 33 button01.setOnClickListener(new View.OnClickListener() { 34 @Override 35 public void onClick(View view) { 36 37 FragmentManager fragmentManager = getFragmentManager(); 38 39 if (fragmentManager != null) { 40 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 41 // BackStackを設定 42 fragmentTransaction.addToBackStack(null); 43 44 fragmentTransaction.replace(R.id.container, new fragment2(), "Wfragment2"); 45 // Fragmentを組み込む 46 //FragmentTransaction transaction = fragmentManager.beginTransaction(); 47 fragmentTransaction.commit(); 48 } 49 } 50 }); 51 } 52 53 @Override 54 public void onActivityCreated(@Nullable Bundle savedInstanceState) { 55 super.onActivityCreated(savedInstanceState); 56 mViewModel = ViewModelProviders.of(this).get(MainViewModel.class); 57 // TODO: Use the ViewModel 58 } 59 60} 61

fragment2.java

java

1 2public class fragment2 extends Fragment { 3 4 private int cnt = 0; 5 6 private String gtai; 7 //入力されたやつを数値に変えた体重 8 private double tai; 9 private double bmi; 10 11 private String s; 12 13 double shin = 150.2; 14 //double tai = 50.8; 15 double mtai = 58.0; 16 17 Calendar cal = Calendar.getInstance(); 18 int month = cal.get(Calendar.MONTH) + 1; 19 20 double shinm = shin / 100; 21 double shinm2 = shinm * shinm; 22 23 public static fragment2 newInstance(int count) { 24 // Fragemnt02 インスタンス生成 25 fragment2 fragment02 = new fragment2(); 26 27 // Bundleにパラメータを設定 28 Bundle barg = new Bundle(); 29 barg.putInt("Counter", count); 30 fragment02.setArguments(barg); 31 32 return fragment02; 33 } 34 35 // FragmentのViewを生成して返す 36 @Override 37 public View onCreateView(@NonNull LayoutInflater inflater, 38 ViewGroup container, 39 Bundle savedInstanceState) { 40 View wf = inflater.inflate(R.layout.fragment, container, false); 41 42 // 画面回転時にFragmentの再生成を禁止 43 setRetainInstance(true); 44 45 //MainActivity ma = (MainActivity)getActivity(); 46 //int value = ma.SharedValue; 47 48 return wf; 49 } 50 51 @Override 52 public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { 53 super.onViewCreated(view, savedInstanceState); 54 55 final TextView reserve_2c_text = getActivity().findViewById(R.id.textView); 56 // R.id.textviewはフラグメント1内の書き込みたいセルのid 57 //fragment.xml には textview はつけてない 58 59 Bundle args = getArguments(); 60 61 /*@Override 62 public void onStart() { 63 super.onStart();*/ 64 Button bu1 = (Button) getActivity().findViewById(R.id.button2); 65 66 bu1.setOnClickListener(new View.OnClickListener(){ 67 @Override 68 public void onClick(View view){ 69 EditText ked = (EditText) getActivity().findViewById(R.id.editText); 70 EditText mted = (EditText) getActivity().findViewById(R.id.editText2); 71 EditText ted = (EditText) getActivity().findViewById(R.id.editText3); 72 73 //今は月単位の指定しかできない 74 //入力値を文字列から数値へ 数値から文字列へして表示 75 String kikan = ked.getText().toString(); 76 String mtai = mted.getText().toString(); 77 gtai = ted.getText().toString(); 78 Toast.makeText(getActivity(), "click", Toast.LENGTH_SHORT).show(); 79 if (kikan.length() != 0) { 80 int i = Integer.parseInt(kikan); 81 int mki = month + i; 82 if (mki > 12) { 83 mki -= 12; 84 } 85 s = String.valueOf(mki); 86 ked.getEditableText().clear(); 87 }else{ 88 89 } 90 91 if (mtai.length() != 0) { 92 mted.getEditableText().clear(); 93 94 } 95 96 if(gtai.length() != 0){ 97 tai = Double.parseDouble(gtai); 98 bmi = tai / shinm2; 99 ted.getEditableText().clear(); 100 } 101 102 // ここでフラグメント1にあるテーブル内のセルに値を書き込んでいる 103 reserve_2c_text.setText("現在の体重" + gtai); 104 } 105 }); 106 } 107/* 108 private void showPerson(String personId) { 109 Intent intent = new Intent(fragment2.this,MainFragment.); 110 intent.putExtra(MainFragment.Gtai12, personId); 111 // intent.putExtra(PersonActivity.EXTRA_MODE_ID, MODE_PRIVACY); 112 // ^^^if needed^^^ 113 startActivity(intent); 114 }*/ 115} 116

試したこと

値の受け渡しにこちらにあった過去の質問の

final TextView reserve_2c_text = getActivity().findViewById(R.id.reserve_2c);
// R.id.reserve_2cはフラグメント1内の書き込みたいセルのid

// ここでフラグメント1にあるテーブル内のセルに値を書き込んでいる
reserve_2c_text.setText((String) spinnerName.getSelectedItem());

こちらの二行を使用できないかと試しましたが問題が発生~となり常況に変化はありませんでした

補足情報(FW/ツールのバージョンなど)

android studio Version 3.5
選んだものは Fragment + ViewModel かと思います

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

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

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

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

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

jimbe

2019/11/20 02:47

コードは, ``` の右に言語名("java")を記入し, その下から次の ``` までの間(現在ファイル名を記入している個所)にコード本体を入れてください. ファイル名は逆に, ``` で囲った外(上の行)に書くか, コードの先頭にコメント行として記入してください.
退会済みユーザー

退会済みユーザー

2019/11/20 02:57

回答ありがとうございます。 こちらで修正できているでしょうか?
jimbe

2019/11/20 02:58

> fragment1 と MainActivity の二つは自動で作成されていた 使用されているIDEの種類(android studio/intelliJ?)とバージョン, java のバージョン, 自動生成された経緯(プロジェクト生成時に選んだサンプル?) 等を補足情報に記載して頂けますか. また, コードは省略せず全文をご提示ください. 特に異常の詳細が分からないのであれば, 確認再現するために同じ環境を作る必要があります.
jimbe

2019/11/20 03:01

コード表記の修正ありがとうございます. お気づきにならなかったようですが, 入力/修正時にページの下方にプレビューが出ていますので, ご活用ください.
退会済みユーザー

退会済みユーザー

2019/11/20 03:13

java のバージョンはわかりませんでした。すみません また何か足りなければおっしゃっていただければと思います。
jimbe

2019/11/20 03:26

状況的に android studio のバージョンだけでも大丈夫と思います. コードが尻切れになっているようです. android studio のエディタ上で両コードともそれぞれ全文(import 等も含めて大丈夫だと思います)を選択・コピー・張り付けして頂けますか.
退会済みユーザー

退会済みユーザー

2019/11/20 03:37

import文は数が多いので入れないでおきました こちらで全部かと思います 質問させていただいたときより編集を加えいらない部分も増えていますがよろしくお願いします。
guest

回答1

0

ベストアンサー

fragment2.onViewCreated() にある

final TextView reserve_2c_text = getActivity().findViewById(R.id.textView);

は機能しません. R.id.textView は MainFragment にあるためです.
受け渡し方法は幾つかあると思いますが, ViewModel を含むプロジェクトですので, そちらをご利用になると良いのではないでしょうか.

ViewModel の使用方法につきましては, 検索すれば情報はあると思います.
基本的には ViewModel にデータを置き, 各フラグメントは ViewModel のデータを取得・更新することで共有します.

投稿2019/11/20 05:22

jimbe

総合スコア12543

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問