Android 在FragmentPagerAdapter中重新创建片段
我正在创建一个应用程序,它有两个页面的FragmentPagerAdapter FragmentPagerAdapter的类如下所示Android 在FragmentPagerAdapter中重新创建片段,android,android-fragments,fragmentpageradapter,Android,Android Fragments,Fragmentpageradapter,我正在创建一个应用程序,它有两个页面的FragmentPagerAdapter FragmentPagerAdapter的类如下所示 public static class AppSectionsPagerAdapter extends FragmentPagerAdapter { public AppSectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public
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;
}
}
我希望第一页上的某些更改(例如更改微调器选定项)会导致第二页上的更改
正如我已经阅读了关于片段通信()的内容,并且理解片段只能通过活动进行通信
对于这种情况,我在第一个页面类片段中创建了公共接口
public interface CurrencyListener {
public void onCurrencyChanged();
}
并在我的活动中实施它
现在我可以从我的第一个页面片段调用活动中的void onCurrencyChanged
但问题是:
如何在我的FragmentPagerAdapter中重新创建第二个页面片段?片段创建操作很繁重 1。如果重新创建片段,将创建所有视图,并且需要对之前的片段进行垃圾收集。因此会有额外的内存 因此,与其重新创建FirstPageFragment,不如根据在
currencyChanged()
方法上收到的回调刷新数据。
在这种情况下,片段将创建一次,并且每次调用currencyChanged()
方法时都会更新数据
历史片段代码(要刷新的片段)
活动(将刷新数据)
片段创建操作很繁重 1。如果重新创建片段,将创建所有视图,并且需要对之前的片段进行垃圾收集。因此会有额外的内存 因此,与其重新创建FirstPageFragment,不如根据在
currencyChanged()
方法上收到的回调刷新数据。
在这种情况下,片段将创建一次,并且每次调用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
}
}
public class MyActivity extends Activity {
/**
* Other method goes here
*/
private IUpdateData dataUpdateListener;
public void setOnUpdateListener(IUpdateData listener){
dataUpdateListener = listener;
}
public void onCurrencyChanged(){
if(dataUpdateListener!=null){
dataUpdateListener.updateData(/**Update Data**/);
}
}
public interface IUpdateData{
void updateData(Object o);
}
}