web-dev-qa-db-ja.com

Jetpackのナビゲーションで2番目のアクティビティを開始する方法

公式になりました:Googleは、シングルアクティビティアプリのアーキテクチャを公式に推奨しています。しかし、ここには難しさがあります。複数のアクティビティがあります。したがって、複数のアクティビティでナビゲーションを実装したいのですが、失敗しました。

複数のアクティビティが同じレイアウトを共有している場合、ナビゲーショングラフを組み合わせて、アクティビティの宛先へのナビゲートコールを置き換えて、2つのナビゲーショングラフ間でコールを直接ナビゲートできます。 ここに

だから私はこれを作成します:

<?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"
app:startDestination="@+id/nav_graph_firstActvity">

<activity
    Android:id="@+id/nav_graph_firstActvity"
    Android:name="io.androidedu.FirstActivity"
    Android:label="First Activity">

    <action
        Android:id="@+id/nav_graph_actFirstActvity"
        app:destination="@id/nav_graph_secondActvity" />
</activity>

<activity
    Android:id="@+id/nav_graph_secondActvity"
    Android:name="io.androidedu.SecondActivity"
    Android:label="Second Activity" />

その後、私は複数のアクティビティのサンプルを見つけることができません ここに そのようなサンプルがあります:

Navigation.findNavController(view).navigate(R.id.nav_graph_actFirstActvity)

ただし、findNavController()はアクティビティではなくビューを待機します。

この人々をどのように解決できますか?

11
AndroidEduIO

ナビゲーションは、フラグメントのナビゲーションを支援することを目的としています。青色の注記で言及されているように、 here

注:ナビゲーションアーキテクチャコンポーネントは、1つのメインアクティビティに複数のフラグメントの宛先があるアプリ向けに設計されています。メインアクティビティは、ナビゲーショングラフを「ホスト」します。複数のアクティビティの宛先を持つアプリでは、追加のアクティビティごとに独自のナビゲーショングラフがホストされます。ホストナビゲーションへのアクティビティの変更については、このドキュメントの後半で説明します。

そのため、nav_graph1.xmlで宛先としてアクティビティを使用し、そのアクティビティ(宛先)に独自のnav_graph2.xmlが必要です。このようにして、アプリを操作する方法としてナビゲーションを使用し続けます。

同じレイアウトを共有する複数のアクティビティを使用する際に、Googleのドキュメントで言及している方法は事実です。少し混乱します。しかし、それらが意味するのは、同じレイアウトを共有するため、Activity1とFragment1(nav_graph1.xml)およびActivity2とFragment2(nav_graph2.xml)をActivity3に(Fragment1とFragment2)とマージでき、nav_graphを使用できるからです。 nav_graph2.xmlを指す.xml

それが役に立てば幸い

更新:

Navigation.findNavController(view).navigate(R.id.nav_graph_actFirstActvity)

ビューは、NavHostFragmentを含むレイアウト内にある任意のビューにすることができます。そのビューまたはそのすべての親に対応する対応するnav_graph.xmlを検索します。

6
egonzal

1つのナビゲーションxmlファイルに複数のアクティビティを入れないでください。ナビゲーションは、非アクティブナビゲーションを解決するためのものです。つまり、フラグメントのみを適切にサポートします。別のアクティビティを開始するには、context.startActivity(intent)のような古き良き方法で実行します。このGoogleサンプルで詳細を確認できます。

https://github.com/googlesamples/Android-sunflower

0
sonnet