LoginSignup
2
2

More than 3 years have passed since last update.

Navigationで最初のFragmentにActivityから引数を渡す

Posted at

「Navigationで最初のFragmentにActivityから引数を渡す」とは?

Navigationを使ってAndroidアプリを開発している時に、
「別のActivityから渡された引数をNavigationで設定した最初のFragmentに渡したい!」
なんて事がある場合の実装方法になります。

:computer:環境構築


    // Navigation
    def navi_version = "2.2.0-alpha01"
    implementation "androidx.navigation:navigation-fragment-ktx:$navi_version"
    implementation "androidx.navigation:navigation-ui-ktx:$navi_version"

Navigation 1.0.0-alpha07以上のバージョンで動作可能

:pencil: 実装


ActivityとFragmentの構成

MainActivityにNavHostFragmentを指定しており、FirstFragmentがNavGraphに指定してある。

  • res/navigation/nav_graph.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/nav_graph"
            app:startDestination="@id/firstFragment"
            tools:ignore="UnusedNavigation">

    <fragment android:id="@+id/firstFragment" 
                             android:name="com.xxxx.xxxxx.FirstFragment"
                             android:label="fragment_first"
                             tools:layout="@layout/fragment_first"/>
</navigation>
  • MainActivity

レイアウトファイル

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.xxxx.xxxx.MainActivity">

    <fragment
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:defaultNavHost="true"/>

</androidx.constraintlayout.widget.ConstraintLayout>

navGraphの指定をする app:navGraph="@navigation/nav_graph" は設定しない

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        findNavController(R.id.nav_host_fragment)
            .setGraph(R.navigation.nav_graph, intent.extras)
    }

    companion object {
        private val TAG = MainActivity::class.java.simpleName
    }
}

コード上でNavGraphを設定し、その時に引数を渡してあげる。
↑の場合、MainActivityに渡された引数をそのままFirstFragmentに渡している。

以上

:link: 参考になったURL


2
2
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
2
2