前提・実現したいこと
あるフラグメントAからフラグメントBのレイアウトを操作する方法が知りたいです。
MainActivity上でFirstFragment、SecondFragmentがあります。このとき、FirstFragmentからSecondFragmentのレイアウト内のTextViewの中身を変更したいです。その手法を教えていただきたいです。
該当のソースコード
MainActivity
kotlin
1lass MainActivity : AppCompatActivity() { 2 3 private lateinit var firstFragment: FirstFragment 4 private lateinit var secondFragment: SecondFragment 5 6 override fun onCreate(savedInstanceState: Bundle?) { 7 super.onCreate(savedInstanceState) 8 setContentView(R.layout.activity_main) 9 10 firstFragment = FirstFragment() 11 secondFragment = SecondFragment() 12 13 val transaction = supportFragmentManager.beginTransaction() 14 transaction.add(R.id.fragment_conteiner, firstFragment) 15 transaction.commit() 16 17 bottom_nav.setOnNavigationItemSelectedListener { 18 when (it.itemId) { 19 R.id.home -> { 20 switchFragment(firstFragment) 21 true 22 } 23 R.id.chat -> { 24 switchFragment(secondFragment) 25 true 26 } 27 else -> { 28 true 29 } 30 } 31 } 32 } 33 34 fun switchFragment(fragment: Fragment) { 35 val transaction = supportFragmentManager.beginTransaction() 36 transaction.replace(R.id.fragment_conteiner, fragment) 37 transaction.commit() 38 } 39}
FirstFragment
kotlin
1class FirstFragment : Fragment() { 2 override fun onCreateView( 3 inflater: LayoutInflater, container: ViewGroup?, 4 savedInstanceState: Bundle? 5 ): View? { 6 return inflater.inflate(R.layout.fragment_first, container, false) 7 } 8}
SecondFragment
kotlin
1class SecondFragment : Fragment() { 2 override fun onCreateView( 3 inflater: LayoutInflater, container: ViewGroup?, 4 savedInstanceState: Bundle? 5 ): View? { 6 return inflater.inflate(R.layout.fragment_second, container, false) 7 } 8}
レイアウト
FirstFragment
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".fragment.FirstFragment"> <TextView android:id="@+id/first_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="First Fragment" android:textSize="30sp" android:textStyle="bold" /> <TextView android:id="@+id/first_fragment_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ami" android:textSize="30sp" /> </LinearLayout>
SecondFragment
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".fragment.FirstFragment"> <TextView android:id="@+id/second_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Second Fragment" android:textSize="30sp" android:textStyle="bold" /> <TextView android:id="@+id/second_fragment_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Kenta" android:textSize="30sp" /> </LinearLayout>
FirstFragmentから、SecondFragmentのレイアウト内のKentaという文字列を変更したいです。
補足情報(FW/ツールのバージョンなど)
- この質問で知りたいことは、あるフラグメントから別のフラグメントのレイアウトを変更する方法です。
- ViewModelを経由して、値を変更することはなしでお願いします。あくまでも、FirstFragmentのonViewCreated()内でレイアウトを操作したいです。このような手法は存在しないんでしょうか?
- 2つのフラグメントを保持しているアクテビティにインターフェースを実装すれば良いという事柄をネットで見たことがあるのですが、具体的にどのようにコードを書けばよいのかが、分かりません。
回答1件
あなたの回答
tips
プレビュー