前提・実現したいこと
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 かと思います
回答1件
あなたの回答
tips
プレビュー