Кнопка навигации компонента Android вверх, стрелка отображается, но всплывающее окно не работает - PullRequest
0 голосов
/ 18 мая 2019

Я использую компонент навигации Jetpack с очень простой настройкой, одним действием (MainActivity) и 4 фрагментами

MainFragment,

CardPreviewFragment,

createCardFragment,

и AddPredictionChipsFragment,

Компонент NavigationUI настраивает мой контроллер навигации с моей панелью инструментов, у меня есть действия, установленные для каждого пункта назначения, и popTo, также установленные для каждого.Я могу успешно перейти к каждому из этих фрагментов, и название панели инструментов изменяется правильно, а значок «Домой» правильно отображает стрелку назад, но нажатие стрелки для использования действия popTo ничего не дает (SIDENOTE, если я установил анимацию поп-ввода и выхода и использовал кнопку «Назад»для возврата используется анимация).Любые идеи приветствуются, ниже приведен соответствующий код, отредактированный для краткости

ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ

public class MainActivity extends AppCompatActivity

@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.content_main);
  setNavigation();
 }

private void setNavigation() {
 navController = Navigation.findNavController(this, R.id.main_fragment);
 NavigationUI.setupActionBarWithNavController(this, navController);
}

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
  return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
 Intent i;
 switch (item.getItemId()){
  case R.id.preferences :
    //code
    return true;
  case R.id.share :
    //code
  case R.id.create :
    //code
  case R.id.about :
    //code
    return true;
 }
 return super.onOptionsItemSelected(item);
}

В моем основном действии используется панель действий, показывающая панель поиска и некоторыепункты меню, я не знаю, влияет ли это как-то на это (пытался удалить их без изменений)

Содержимое main содержит фрагмент навигационного хоста

<fragment
  android:id="@+id/main_fragment"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:name="androidx.navigation.fragment.NavHostFragment"
  app:defaultNavHost="true"
  app:navGraph="@navigation/nav_main"/>

Фрагменты используют androidx:EditFragment расширяет Fragment и не использует опции меню или что-либо подобное, все они являются просто стандартными фрагментами, вот мой график навигации

  <?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_main"
      app:startDestination="@id/mainFragment">
      <fragment
        android:id="@+id/mainFragment"
        android:name="com.sealstudios.simpleaac.ui.MainFragment"
        android:label="Simple AAC"
        tools:layout="@layout/fragment_main">
        <action
          android:id="@+id/action_mainFragment_to_cardPreviewFragment"
          app:destination="@id/cardPreviewFragment"
          app:popUpTo="@+id/mainFragment"
          app:popUpToInclusive="false"/>
        <action
          android:id="@+id/action_mainFragment_to_createCardFragment"
          app:destination="@id/createCardFragment"
          app:popUpTo="@+id/mainFragment"
          app:popUpToInclusive="false"/>
      </fragment>
      <fragment
        android:id="@+id/cardPreviewFragment"
        android:name="com.sealstudios.simpleaac.ui.CardPreviewFragment"
        android:label="Preview Card"
        tools:layout="@layout/preview_card_fragment">
        <action
          android:id="@+id/action_cardPreviewFragment_to_createCardFragment"
          app:destination="@id/createCardFragment"
          app:popUpTo="@+id/mainFragment"
          app:popUpToInclusive="false"/>
      </fragment>
      <fragment
        android:id="@+id/addPredictionChipsFragment"
        android:name="com.sealstudios.simpleaac.ui.AddPredictionChipsFragment"
        android:label="Add Predictions"
        tools:layout="@layout/add_prediction_chips_fragment_layout"/>
      <fragment
        android:id="@+id/createCardFragment"
        android:name="com.sealstudios.simpleaac.ui.CreateCardFragment"
        android:label="Create / Edit"
        tools:layout="@layout/fragment_create_card">
        <action
          android:id="@+id/action_createCardFragment_to_addPredictionChipsFragment"
          app:destination="@id/addPredictionChipsFragment"
          app:popUpTo="@+id/createCardFragment"
          app:popUpToInclusive="false"/>
      </fragment>
    </navigation>

и вот пример того, как я вызываю одно из действий,

  Navigation.findNavController(requireActivity(),R.id.main_fragment)
  .navigate(R.id.action_mainFragment_to_cardPreviewFragment);

это действие перемещается в правильное место, получая правильный заголовок с метки, но не позволяет мне перемещаться назад / вверх с помощью стрелки, полный проект здесь

ОБНОВЛЕНИЕ Это воспроизводимо

Я могу создать новый проект, добавить компонент навигации и 2 фрагмента, добавить график навигации и добавить navhost к основному содержимому, ия в конечном итоге с тем же поведением (стрелка появляется, но ничего не всплывает, включая сам график) я использую "androidx.navigation: фрагмент-навигации: 2.1.0-alpha03" и "androidx.navigation: navigation-ui: 2.1.0-alpha03 ", и я сделал пример проекта здесь и поднял ошибку в трекере проблем

UPDATE Google вернулись ко мне и сказали, что этоожидаемое поведение, хотя я вполне уверен, что он не понял и определенно не выполнил приведенный мною пример

1 Ответ

0 голосов
/ 20 мая 2019

При использовании setupWithActionBarWithNavController() необходимо переопределить onSupportNavigateUp(), чтобы вызвать значок «Вверх» на панели действий согласно документации :

@Override
public boolean onSupportNavigateUp() {
    return Navigation.findNavController(this, R.id.main_fragment).navigateUp()
            || super.onSupportNavigateUp();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...