Как передать ресурс из одного фрагмента в другой?

147
15 октября 2018, 13:30

В одном фрагменте есть кнопки, по нажатию которых открывается другой

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            fragmentTransaction.replace(R.id.container, textFragment).commit();
        }
    });
    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            fragmentTransaction.replace(R.id.container, textFragment).commit();
        }
    });

В другом фрагменте

TextView text = (TextView) view.findViewById(R.id.text);

и в этот TextView нужно добавить текст из ресурса в зависимости от того, что было нажато. Если btn1, то R.string.b1, если btn2, то R.string.b2. Как это лучше сделать? Кнопок много и не хочется создавать для каждой фрагмент - это глупо.

Answer 1

Вашу задачу можно решить несколькими способами. Вот один из них

Создаем utils класс.

public class FragmentUtils {
    public static void replaceFragment(FragmentActivity activity, Fragment fragment) {
        FragmentTransaction fragmentTransaction;
        fragmentTransaction = activity.getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.content_main, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }
}

И через Bundle будем передовать ID нашей строки или сразу String(решать вам), которую нужно отобразить.

Это может выглядеть вот так:

        Bundle bundle = new Bundle();
        bundle.putInt("ID", R.string.app_name);
        TextFragment textFragment = new TextFragment();
        adapterCvodkaFragment.setArguments(bundle);
        FragmentUtils.replaceFragment(this, textFragment);

В методе onCreateView() вашего фрагменты получаете ID вашей строки.

Bundle bundle = getArguments();
    if (bundle != null) {
        id = bundle.getInt("ID);
    }

И передаете уже вашему TextView

READ ALSO
Как вывести AlertDialog?

Как вывести AlertDialog?

Мне надо по нажатию на кнопку в быстрых настройках (Tileservice) открыть AlertDialog, но его не открыть без активити, мне не надо, чтобы открывалось активити,...

154
Numeric overflow in expression при складывании String

Numeric overflow in expression при складывании String

С одним все работает, если сложить, то не хочет

174
Как скрыть часть текста или весь в TextView?

Как скрыть часть текста или весь в TextView?

В TextView у меня выводится несколько строковых ресурсов:

158
Низкий FPS из-за блокировки Canvas

Низкий FPS из-за блокировки Canvas

Представленный ниже игровой цикл находится в классе расширяющем Thread и хоть я добавляю отрисовку хоть убираю, fps практически не изменятсяЭто...

160