Проблема с передачей данных между фрагментами с SafeArgs - PullRequest
1 голос
/ 06 мая 2020

Я хочу передать строку из одного фрагмента в другой. Проблема в том, что мой класс HomeFragmentDirections сообщает, что действие, которое я хочу получить, «имеет частный доступ».

Nav_graph. xml:

<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/nav_home">

<fragment
    android:id="@+id/nav_home"
    android:name="com.example.chronosaur.ui.HomeFragment"
    android:label="Home"
    tools:layout="@layout/fragment_home">
    <action
        android:id="@+id/action_add_data"
        app:destination="@+id/addDataFragment" />
</fragment>
<fragment
    android:id="@+id/nav_diagram"
    android:name="com.example.chronosaur.ui.DiagramsFragment"
    android:label="fragment_diagrams"
    tools:layout="@layout/fragment_diagrams" />
<fragment
    android:id="@+id/nav_shop"
    android:name="com.example.chronosaur.ui.ShopFragment"
    android:label="fragment_shop"
    tools:layout="@layout/fragment_shop"/>
<fragment
    android:id="@+id/addDataFragment"
    android:name="com.example.chronosaur.ui.AddDataFragment"
    android:label="Add data"
    tools:layout="@layout/fragment_add_data" >
    <argument
        android:name="currentDate"
        app:argType="string"
        android:defaultValue="default" />
</fragment>

HomeFragment:

 String currentDate = "hello";
 @Override
 public void onActivityCreated(@Nullable Bundle savedInstanceState) {
 super.onActivityCreated(savedInstanceState);

 btn_add = getActivity().findViewById(R.id.btn_add);
 btn_add.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        HomeFragmentDirections.ActionAddData() action = new HomeFragmentDirections.ActionAddData(); 
     // error in this string
        action.setCurrentDate(currentDate);
        Navigation.findNavController(v).navigate(action);

      }
    });
   }

Ошибка, мне не удается запустить приложение:

error: ActionAddData() has private access in ActionAddData

Как решить проблему? Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Передайте значение String прямо в конструктор, например:

HomeFragmentDirections.ActionAddData() action = new HomeFragmentDirections.ActionAddData("Your String Value");
0 голосов
/ 06 мая 2020

Действие должно быть определено следующим образом:

HomeFragmentDirections.ActionAddData action = HomeFragmentDirections.actionAddData();
            action.setCurrentDate(currentDate);
            Navigation.findNavController(v).navigate(action);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...