在我的应用程序中,我有一个activity
,在此活动中,我有3个fragments
并使用fragments
显示此ViewPager
。
在片段#1 中,我向服务器发送请求以获取一些数据并设置为片段#1 视图。
第一次运行时显示此片段,显示加载并获取数据。 但在片段之间滚动并收到片段#1 时,再次显示加载和发送请求数据。
我想第一次向服务器发送请求并显示加载,在片段之间滚动时不再向服务器发送此请求!
片段#1中的我的代码:
public class SerialDetailInfoFragment extends Fragment {
@BindView(R.id.infoSerialFrag_castRecyclerView)
RecyclerView infoSerialFrag_castRecyclerView;
@BindView(R.id.epGuideSerialFrag_relatedNewsLay)
RelativeLayout epGuideSerialFrag_relatedNewsLay;
@BindView(R.id.epGuideSerialFrag_relatedNewsRecyclerView)
RecyclerView epGuideSerialFrag_relatedNewsRecyclerView;
@BindView(R.id.epGuideSerialFrag_loadingContent)
AVLoadingIndicatorView epGuideSerialFrag_loadingContent;
@BindView(R.id.infoSerialFrag_addWatchList)
FloatingActionButton infoSerialFrag_addWatchList;
private SerialDetailSendData SendData;
private int serialID;
private String serialImage, chipKey;
private KeyListener variable;
private GoldenGlobeDialogAdapter goldenGlobeDialogAdapter;
private AwardModelAdater awardModelAdapter;
private WhoWatchedAdapter whoWatchedAdapter;
private CastAdapter castAdapter;
private RelatedNewsAdapter relatedNewsAdapter;
private List<Award> awardModel = new ArrayList<>();
private List<String> cloudChipList = new ArrayList<>();
private List<Result> whoWatchedModel = new ArrayList<>();
private List<Star> starModel = new ArrayList<>();
private List<NewsDatum> newsModel = new ArrayList<>();
private String[] mostlyMatchedKeywordsStrings;
public SerialDetailInfoFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_serial_detail_info, container, false);
//Initialize
ButterKnife.bind(this, view);
context = getActivity();
seriesActivity = (SeriesDetailActivity) getActivity();
variable = infoSerialFrag_rememberSwitchText.getKeyListener();
relatedNewsAdapter = new RelatedNewsAdapter(context, newsModel);
//Get serial id
serialID = seriesActivity.getSerialID();
//Get Collapsing
isCollapsing = seriesActivity.getCollapsing();
//Change rate textView
infoSerialFrag_GenreRateSeekBar.setOnProgressChangeListener(new DiscreteSeekBar.OnProgressChangeListener() {
@Override
public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {
infoSerialFrag_GenreRateText.setText(value + "");
}
@Override
public void onStartTrackingTouch(DiscreteSeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(DiscreteSeekBar seekBar) {
}
});
hideView(infoSerialFrag_contentLay);
getData();
getRelatedNews();
return view;
}
我的ViewPager代码:
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new SerialDetailInfoFragment(), context.getResources().getString(R.string.info));
adapter.addFrag(new SerialDetailEpGuildFragment(), context.getResources().getString(R.string.episodesGuide));
adapter.addFrag(new SerialDetailReviewFragment(), context.getResources().getString(R.string.reviews));
viewPager.setAdapter(adapter);
}
private static class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
我该怎么办?请帮助我的朋友&lt; 3
答案 0 :(得分:2)
将此行添加到ViewPager设置中。
viewPager.setOffscreenPageLimit(3);
您的setupViewPager
方法如下所示:
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new SerialDetailInfoFragment(), context.getResources().getString(R.string.info));
adapter.addFrag(new SerialDetailEpGuildFragment(), context.getResources().getString(R.string.episodesGuide));
adapter.addFrag(new SerialDetailReviewFragment(), context.getResources().getString(R.string.reviews));
viewPager.setOffscreenPageLimit(3);
viewPager.setAdapter(adapter);
}
ViewPagers的默认行为是将1 Fragment保留在活动片段左侧和右侧的内存中,这样,为了避免再次执行请求,您可以通过增加此值来维持Fragment的活动。 / p>
的文档设置应保留在页面两侧的页数 处于空闲状态的视图层次结构中的当前页面。页面超出此范围 在需要时,将从适配器重新创建限制。
这是作为优化提供的。如果您事先知道这个号码 您将需要支持或具有延迟加载机制的页面 放在你的页面上,调整这个设置可以带来好处 感知到的分页动画和交互的平滑性。如果你有 少量页面(3-4),您可以一次保持活动状态, 在新创建的视图子树的布局中花费的时间会减少 用户来回翻页。
您应该保持此限制,特别是如果您的网页很复杂 布局。此设置默认为1.
如果您将其设置为值3,则Android系统会将所有碎片保持活动状态。
答案 1 :(得分:0)
嗯,你可以设置一个布尔值,默认情况下将其设置为true,并在第一次将其更改为false。为此调用方法。
如果你想拥有布尔值,即使用户退出应用程序并在将来返回,你甚至可以将你定义的变量存储在SharedPrefrences中。
SharedPrefrence值将一直保留,直到用户卸载该应用程序。