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

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

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

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

893閲覧

上のFragmentで入力した内容を下のFragmentに表示させたい

yu9718s

総合スコア9

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/06/01 09:09

上のFragmentで入力した内容を下のFragmentに表示させたいのですが、 エラーすら起きていないので修正点がわかりません。 この場合は何が足りないかを考えるためにはどうしたらよいか教えていただけないでしょうか。
import android.content.Intent import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.EditText import android.widget.TextView import kotlinx.android.synthetic.main.fragment_test.* import kotlinx.android.synthetic.main.fragment_test2.* /** * A simple [Fragment] subclass. */ @Suppress("UNREACHABLE_CODE") class testFragment : Fragment() { val lvEditText = view?.findViewById<EditText>(R.id.lvEditText) private val lvButton = view?.findViewById<Button>(R.id.lvButton) val lvTextView = view?.findViewById<TextView>(R.id.lvTextView) override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { Log.i("MainActivity", "onCreateView") return inflater.inflate(R.layout.fragment_test, container, false) val onClickListener = lvButton?.setOnClickListener(ButtonClickListener()) } private inner class ButtonClickListener : View.OnClickListener { override fun onClick(v: View?) { Log.i("MainActivity", "onClick") if (lvEditText?.text != null) lvTextView?.text = lvEditText.text.toString() } } }
import android.os.Bundle import android.provider.AlarmClock.EXTRA_MESSAGE import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.EditText import android.widget.TextView /** * A simple [Fragment] subclass. */ @Suppress("UNREACHABLE_CODE") class test2Fragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { Log.i("MainActivity", "onCreateView") return inflater.inflate(R.layout.fragment_test2, container, false) } }

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

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

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

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

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

hoshi-takanori

2020/06/01 11:46

return の後に val onClickListener = lvButton?.setOnClickListener(ButtonClickListener()) と書いても実行されません。(Java ではコンパイルエラーですが、Kotlin ではエラーにはしてくれないようです。) Fragment 間では直接メソッドを呼び出したりはできない (できなくはないけど問題が起こる) ので、いったん Activity を経由するなど、いろいろとややこしい手続きを踏む必要があります。
yu9718s

2020/06/02 00:15

ご回答ありがとうございます。 Activityを経由する方法を調査してまいります。
guest

回答1

0

ベストアンサー

ViewModel+LiveData+Databindingを使ってください。
build.gradleに追記し、ViewModelクラスを作成して下さい。

//build.gradle(Modul.app) android { ... //以下追記 dataBinding { enabled true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } } dependencies { ... //以下追記 implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation "androidx.fragment:fragment-ktx:1.2.1" }

kotlin

1class testFragment : Fragment() { 2 3 private val viewModel: TestViewModel by activityViewModels() 4 private lateinit var binding: FragmentTestBinding 5 6 override fun onCreateView( 7 inflater: LayoutInflater, 8 container: ViewGroup?, 9 savedInstanceState: Bundle? 10 ): View? { 11 binding = DataBindingUtil.inflate(inflater, R.layout.fragment_test, container, false) 12 return binding.root 13 } 14 15 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 16 super.onViewCreated(view, savedInstanceState) 17 18 lvButton.setOnClickListener { 19 viewModel.addText(lvEditText.text.toString()) 20 } 21 } 22}

kotlin

1class test2Fragment : Fragment() { 2 3 private val viewModel: TestViewModel by activityViewModels() 4 private lateinit var binding: FragmentTest2Binding 5 6 override fun onCreateView( 7 inflater: LayoutInflater, 8 container: ViewGroup?, 9 savedInstanceState: Bundle? 10 ): View? { 11 binding = DataBindingUtil.inflate(inflater, R.layout.fragment_test2, container, false) 12 binding.testViewModel = viewModel 13 binding.lifecycleOwner = viewLifecycleOwner 14 return binding.root 15 } 16}

kotlin

1class TestViewModel : ViewModel() { 2 3 private var _text = MutableLiveData<String>() 4 val text: LiveData<String> = _text 5 6 init { 7 _text.value = "" 8 } 9 10 fun addText(text :String) { 11 _text.value = text 12 } 13}

XML

1<?xml version="1.0" encoding="utf-8"?> 2<layout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto"> 4 5 <androidx.constraintlayout.widget.ConstraintLayout 6 android:layout_width="match_parent" 7 android:layout_height="match_parent"> 8 9 <Button ...省略... /> 10 11 <EditText ...省略.../> 12 </androidx.constraintlayout.widget.ConstraintLayout> 13</layout>

XML

1<?xml version="1.0" encoding="utf-8"?> 2<layout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto"> 4 5 <data> 6 <variable 7 name="testViewModel" 8 type="com.example.test.TestViewModel" /> 9 </data> 10 11 <androidx.constraintlayout.widget.ConstraintLayout 12 android:layout_width="match_parent" 13 android:layout_height="match_parent"> 14 15 <TextView 16 ...省略... 17 android:text="@{testViewModel.text}"/> 18 </androidx.constraintlayout.widget.ConstraintLayout> 19</layout> 20

投稿2020/06/05 15:14

falcom_zx

総合スコア65

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

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

yu9718s

2020/06/23 01:18

返信遅れてしまい申し訳ございません。 おかげさまで解決いたしました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問