Передача данных между фрагментами с помощью Bundle - PullRequest
0 голосов
/ 08 декабря 2018

Я читал много дискуссий об этом, и кто-то предлагает использовать Bundle для передачи данных между двумя фрагментами в одном и том же упражнении ... Я пытался кое-что сделать, но это не сработало.У меня есть 2 фрагмента в моем GroupDetailActivity.PaymentFragment, который загружает данные из базы данных и показывает их в виде списка, а фрагмент FragmentReport, который отображает отчет о платежах.Итак, после того, как paymentFragment получил данные, мне нужно передать некоторые из них во второй фрагмент.Это мой код:

PaymentFragment:

final Bundle bundle = new Bundle();
final FragmentReport fragment = new FragmentReport();

// This is inside the onCreateView, where I get the the data from the db and show them in a listview
bundle.putInt("num_of_pay", cont);
Log.v("cont", String.valueOf(cont)); // it display the correct number of person
fragment.setArguments(bundle);

getFragmentManager().beginTransaction().replace(R.id.container, fragment);

Затем, в моем FragmentReport, внутри OnCreateView:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView=inflater.inflate(R.layout.report_fragment,container,false);
    numberOfPaymentTV = rootView.findViewById(R.id.n_payment_tv);

    Bundle args = this.getArguments();
    if (args != null){
        numberOfPaymentTV.setText(args.getInt("num_of_pay"));
        Log.v("totalPayment", String.valueOf(args.getInt("num_of_pay"))); // I don't get any log, maybe this fragment doesn't receive the data
    }

    return rootView;
}
}

Я не получаю никакой ошибки,но textView не показывает значение "cont".Может быть, я мог бы использовать sharedPreferences?Возможно ли достичь этого с помощью Bundle?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Вы должны использовать String.valueOf (int) при установке int как текста в TextView:

numberOfPaymentTV.setText(String.valueOf(getArguments().getInt("num_of_pay"))
0 голосов
/ 08 декабря 2018

Вы можете получить аргументы в функции onCreate().

private Bundle bundle;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_blank, container, false);

    ((TextView) view.findViewById(R.id.textView))
            .setText(String.valueOf(bundle.getInt("KEY")));

    return view;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.bundle = getArguments();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...