在 viewpager 中重新启动片段时无法更新片段参数

问题描述 投票:0回答:2

我正在调用 Web 服务时在视图寻呼机中重新启动片段,但无法更新片段中传递的参数。它会保持不变,第一次通过。

代码:

@Override
protected void onPostExecute(String response) {
 state = mOverviewData.getState();     
 setupViewPager(mViewPager, isSuccess);
}

private void setupViewPager(ViewPager viewPager, boolean isSuccess) 
{

        Adapter adapter = new Adapter(getSupportFragmentManager());
        if(isSuccess){
            fab.setVisibility(View.VISIBLE);
            Fragment chartFrag = new OverviewChartFrag();
            Bundle arg = new Bundle();
            arg.putString("state_name",  state);
            arg.putSerializable("total_blocks",  mOverviewData.getTotalBlock());
            arg.putSerializable("block_status_obj",  mOverviewData.getBlockStatusData());
            arg.putParcelableArrayList("mineral_wise_list", (ArrayList<? extends Parcelable>) mineralList);
            chartFrag.setArguments(arg);

            Fragment blocksFrag = new OverviewDataFrag();
            arg = new Bundle();
            arg.putString("state_name",  state);
            arg.putParcelableArrayList("public_data_list", (ArrayList<? extends Parcelable>) mOverviewData.getPublicTableData());
            blocksFrag.setArguments(arg);

            adapter.addFragment(chartFrag, getResources().getString(R.string.chart_tab));
            adapter.addFragment(blocksFrag, getResources().getString(R.string.data_tab));
            viewPager.setAdapter(adapter);
        } else {
            fab.setVisibility(View.GONE);
            Fragment noNetFrag = new ServerErrorFrag();
            adapter.addFragment(noNetFrag, getResources().getString(R.string.error));
            viewPager.setAdapter(adapter);
        }
    }
android web-services android-fragments
2个回答
0
投票

您不必在

setupViewPager
内调用
onPostExecute
。使用下面的代码获取之前添加的
Fragment
的参考并完成您的工作。

Adapter adapter = (Adapter) viewPager.getAdapter();
// we don't need but its a fail safe
if (adapter != null) {
    int childCount = adapter.getCount();
    for (int index = 0; index < childCount; index++) {
        Fragment fragment = (Fragment) adapter.instantiateItem(viewPager, index);
        // safe check
        if (fragment != null) {
            // you have a valid reference of your fragment, update its content or GUI
        }
    }
}

快乐的编码。


0
投票

你可以这样使用:

arguments?.let {
      synchronized(it) {
        arguments?.putString("YOUR_KEY", yourValue)
      }
    }
© www.soinside.com 2019 - 2024. All rights reserved.