我正在创建具有两个页面的FragmentPagerAdapter的应用程序。
FragmentPagerAdapter的类看起来像这样
public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment;
switch (i) {
case 0: fragment = new CurrentRateFragment(); break;
case 1: fragment = new HistoryFragment(); break;
default: fragment = new CurrentRateFragment(); break;
}
return fragment;
}
@Override
public int getCount() {
return 2;
}
}
我希望第一页上的某些更改(例如更改Spinner所选项目)导致第二页上的更改。
正如我所读到的片段通信(https://developer.android.com/training/basics/fragments/communicating.html)并了解片段只能通过Activity进行通信。
对于这种情况,我在我的第一个页面类片段
中创建了公共接口public interface CurrencyListener {
public void onCurrencyChanged();
}
并在我的活动中实施。
现在我可以从我的第一页片段中调用我的Activity中的void onCurrencyChanged。
但问题是:
如何在FragmentPagerAdapter中重新创建第二页片段?
答案 0 :(得分:2)
片段创建操作很重。
1。如果重新创建片段,则将创建所有视图,并且需要对之前的片段进行垃圾回收。因此会有额外的记忆。
因此,不是重新创建FirstPageFragment,而只是根据static
方法收到的回调刷新数据。
在这种情况下,片段将被创建一次,每次调用currencyChanged()
方法时都会更新数据。
HistoryFragment Code(要刷新的片段)
currencyChanged()
活动(将刷新数据)
public class HistoryFragment extends Fragment implements MyActivity.IUpdateData{
/**
* Other method goes here
*/
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//
if(getActivity() instanceof /**Your Activity**/){
((/**Your Activity**/)getActivity()).setOnUpdateListener(this);
}
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void updateData(Object object) {
//Refresh Data
}
}