Передача данных из activity во фрагмент — как?

#android

#Android

Вопрос:

Я хочу передать данные пользователей (имя, имя пользователя, адрес электронной почты) из операции входа во фрагмент. Я уже искал ответ и обнаружил, что мне пришлось работать с пакетами. Это то, что я получил до сих пор.

Здесь я сохраняю данные в пакете.

LoginActivity

 Bundle bundleUserData = new Bundle();
HomeFragment fragment = new HomeFragment();
bundleUserData.putString("fullname", fullnameFromDB);
bundleUserData.putString("username", usernameFromDB);
bundleUserData.putString("email", emailFromDB);
fragment.setArguments(bundleUserData);
 

Здесь я пытаюсь получить данные. Я должен был сделать это, если оператор, чтобы избавиться от NPE.

Фрагмент

 if (getArguments() != null) {
    String strFullname = getArguments().getString("fullname");
    String strUsername = getArguments().getString("username");
    String strEmail = getArguments().getString("email");

    gebruikersnaam.setText(strUsername);
    txtEmail.setText(strEmail);
    txtFullname.setText(strFullname);
}       
 

По какой-то причине текстовые представления не задаются строкой, в которой хранятся данные.

Кто-нибудь может увидеть здесь проблему?

Комментарии:

1. Я заставил его работать с SharedPreference, но это лучший способ? Когда использовать Bundle и когда SharedPreference?

2. Для обмена данными от activity к activity или activity к фрагментам или фрагментам к фрагментам, Bundle — одна из лучших практик SharedPref здесь не является хорошим выбором. Но для хранилища лучше всего использовать некоторые значения, такие как имя пользователя или общие настройки сеанса входа.

3. Можете ли вы показать код в операции входа в систему, где вы добавляете / заменяете HomeFragment и куда вы помещаете код для извлечения данных в HomeFragment?

4. @SonTruong для извлечения —> oncreate. Чтобы добавить / заменить -> onclicklistener

5. Переходит ли ваш код во фрагменте в блок if?

Ответ №1:

Сначала вы должны поместить getArgument в пакет в вашем фрагменте. Попробуйте это, пожалуйста:

 Bundle bundle = this.getArguments();
String myValue = bundle.getString("message");
 

Комментарии:

1. Не работает.. Правильно ли я передал данные при входе в систему?

2. @dub не могли бы вы отладить свое приложение и посмотреть, получают ли ваши переменные свои значения?