Каков правильный подход для установки значений объекта из нескольких фрагментов? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть объект «Пользователь», и у него есть такие свойства, как имя, адрес электронной почты, номер телефона, адрес и т. Д.

Теперь у меня есть действие с именем «Register_Activity», в котором есть разные фрагменты для задания имени, проверки инастройка электронной почты и т. д.
Теперь в SetNameFragment я создаю экземпляр объекта User и вызываю для него setName.

Теперь, как передать этот объект следующему фрагменту?Я думал об использовании ViewModel, но я не думаю, что он предназначен для таких операций.
Другой способ, который я использовал, - это создание экземпляра User в Activity, а затем вызов объекта из фрагмента и установка его значений, Itработает, но я хочу быть уверен, что это правильный путь.

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

вы можете использовать класс связки для отправки данных из одного фрагмента в другой ... Первый фрагмент, шаг 1: создать класс связки, как,

Bundle bundle = new Bundle();
bundleFirstFragment.putString("name","John snow");

шаг 2: присоединить ваш пакет данных к фрагменту, как,

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    Fragment secondFragment= new SecondFragment();
    secondFragment.setArguments(bundle );
    transaction.replace(R.id.container, secondFragment);
    transaction.addToBackStack(null);
    transaction.commit();

Второй фрагмент ..

Bundle bundle = getArguments();
String name = bundle.getString("name")
Log.v("name value :"+name);
0 голосов
/ 15 февраля 2019

Вы можете предоставить значение имени для действия (пожалуйста, не делайте это напрямую. Выполните действие, которое реализует некоторый интерфейс с методами обратного вызова и задает его как фрагмент в качестве объекта интерфейса), а затем предоставьте значение имени для следующего фрагмента, используя аргументы.

Кроме того, вам действительно нужно использовать разные фрагменты?Может быть, вы можете просто использовать разные представления в одном упражнении и менять их, когда вам нужно.Для достижения этой логики вы можете использовать viewpager или viewflipper

0 голосов
/ 15 февраля 2019

У вас может быть объект User внутри вашей деятельности

public class MainActivity extends AppCompatActivity{

User userInfo;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        UserInfo = new User();
}
}

А внутри фрагментов вы можете получить доступ к этому объекту и установить его значения

public class Fragment1 extends Fragment {
@Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment1);

    ((MainActivity)getActivity()).userInfo.setUserName("UserName")
    .....
    .....
    return view;
    }
}


public class Fragment2 extends Fragment {
@Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment2);

    ((MainActivity)getActivity()).userInfo.setUserEmail("UserEmail")
    // set Other values
    .....
    .....
    return view;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...