1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Android開発でFragmentからActivityのUIを操作したい場面があります。その方法をいくつかメモします。

findViewByIdで直接UIを操作する

val textView = requireActivity().findViewById<TextView>(R.id.header_text)
textView.text = "テキストを変更しました。"

シンプルで分かりやすく、小規模なアプリで手っ取り早く使えます。しかしActivityに依存するのと、複雑になると保守が難しくなります。

②Activityの関数をFragmentから呼び出す

🔸Activityに関数を定義

class MainActivity : AppCompatActivity() {
    fun setHeaderVisible(visible: Boolean) {
        headerLayout.visibility = if (visible) {
            View.VISIBLE
        } else {
            View.GONE
        }
    }
}

🔸Fragmentから呼び出す

(requireActivity() as? MainActivity)?.setHeaderVisible(true)

✅ メリット
Activity内でUI操作以外の処理にも応用できます。ただし特定のActivityに依存するため、再利用性、保守性は下がります。

③インターフェースで連携

インターフェースを定義する

interface HeaderController {
    fun setHeaderVisible(visible: Boolean)
}

Activityにてインターフェースを実装する

class MainActivity : AppCompatActivity(), HeaderController {
    override fun setHeaderVisible(visible: Boolean) {
        headerLayout.visibility = if (visible) {
            View.VISIBLE
        } else {
            View.GONE
        }
    }
}

Fragmentから呼び出す

(requireActivity() as? HeaderController)?.setHeaderVisible(true)

ActivityとFragmentで別々の役割を持つことができ、複数のActivityに再利用できます。テスト・保守性に優れています。

特定のActivity前提で関数を呼ぶ場合は②を使用し、再利用性や保守性を高めたい場合は③を使用します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?