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

У меня есть фрагмент, который вызывается из действия, когда этот фрагмент загружается, он генерирует несколько диаграмм. Теперь мне нужно обновить эти диаграммы, но данные, используемые для обновления этих диаграмм, получены из аргумента фрагмента.

public static BaseFragment newInstance(WholeReportsData wholeReportsDataFB, WholeReportsData wholeReportsDataTeam) {
    MainReportFragment fragment = new MainReportFragment();
    Bundle args = new Bundle();
    args.putParcelable(ARG_WHOLEREPORTSINFO_FB, wholeReportsDataFB);
    args.putParcelable(ARG_WHOLEREPORTSINFO_TEAM, wholeReportsDataTeam);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(@android.support.annotation.Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mWholeReportsDataFB = getArguments().getParcelable(ARG_WHOLEREPORTSINFO_FB);
        mWholeReportsDataTeam = getArguments().getParcelable(ARG_WHOLEREPORTSINFO_TEAM);
    } else {
        mWholeReportsDataFB = new WholeReportsData();
        mWholeReportsDataTeam = new WholeReportsData();
    }
}

Я обновляю фрагмент, как и следующий код, но я не знаю, как обновить аргументы.

private void reloadFragment(){

        mReportsPresenter = ((HomeActivity)getActivity()).getReportPresenter();

        mWholeReportsDataFB = new WholeReportsData(null, "", true);
        mWholeReportsDataTeam = new WholeReportsData();
        mReportsPresenter.requestReportsInfo(new ReportsRequestParams(getActivity(), ReportsRequestParams.TYPE_FAMILYBANKER));
        if (SessionUserResult.getInstance().getFamilyBanker().isEsSupervisor()) {
            mReportsPresenter.requestReportsInfo(new ReportsRequestParams(getActivity(), ReportsRequestParams.TYPE_TEAM));
            mWholeReportsDataTeam.setLoadingService(true);
        }



        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            getActivity().getSupportFragmentManager().beginTransaction().detach(this).commitNow();
            getActivity().getSupportFragmentManager().beginTransaction().attach(this).commitNow();
        } else {
            getActivity().getSupportFragmentManager().beginTransaction().detach(this).attach(this).commit();
        }

    }

Спасибо

1 Ответ

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

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

или вы можете проверить, что аргументы не равны NULL, а затем обновить их, либо установить новые аргументы,

Bundle bundle = new Bundle();
    bundle.putLong(Constants.EXTRA_DO_ID, doId);
    bundle.putInt(Constants.EXTRA_DO_OPTIONS_DIALOG_MODE, MODE_GET_INSPIRE_BY_DO);
    if (fragment.getArguments() != null) {
        fragment.getArguments().putAll(bundle);
    } else
        fragment.setArguments(bundle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...