Я использую Jetpack Navigation в моем приложении с одним действием и двумя фрагментами (Фрагмент A, который также является домашним фрагментом, и Фрагмент B, который можно перемещать из Фрагмента A).
Существует intent-filter
добавлен к MainActivity
, как показано ниже, который может принимать простой текст.
<activity android:name=".MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="@string/text_mime_type_text_plain"/>
</intent-filter>
</activity>
Когда пользователь выбирает мое приложение из общего списка Android, конечная цель - передать данные, полученные из Намерения, вФрагмент B. В настоящее время я получаю намерение во фрагменте A (домашний фрагмент) и затем использую NavController
для перехода к фрагменту B с использованием приведенного ниже кода.
private fun checkReceivedIntent() {
val receivedUrlIntent = activity?.intent
val intentAction = receivedUrlIntent?.action
val intentType = receivedUrlIntent?.type
if (intentAction == Intent.ACTION_SEND && intentType != null) {
if (intentType == getString(R.string.text_mime_type_text_plain) ) {
val receivedText = receivedUrlIntent.getStringExtra(Intent.EXTRA_TEXT)
val action = FragmentADirections.actionFragmentAToFragmentB(receivedText)
findNavController().navigate(action)
}
}
}
Проблема заключается в том, что когда фрагмент Bпри нажатии кнопки «Назад» или стрелки «Назад» на панели инструментов (даже при многократном нажатии) фрагмент A не появляется, а фрагмент B продолжает появляться.
Я не знаю, что мне не хватает. Является ли это правильным способом открыть определенный фрагмент, когда приложение открывается пользователем из общего ресурса в другом приложении?
Редактировать
activity_main. xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<fragment
android:id="@+id/navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottomAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:fabCradleMargin="8dp"
/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fabMainActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add"
app:layout_anchor="@id/bottomAppBar" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>