我正在调用 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);
}
}
您不必在
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
}
}
}
快乐的编码。
你可以这样使用:
arguments?.let {
synchronized(it) {
arguments?.putString("YOUR_KEY", yourValue)
}
}