gpt4 book ai didi

android - 如果已经对所有页面发出网络请求,如何防止 viewpager 发出网络请求

转载 作者:行者123 更新时间:2023-11-29 00:11:32 24 4
gpt4 key购买 nike

我有一个包含三个使用 FragmentStatePagerAdapter 的页面的 viewpager。每个页面的 fragment 都是相同的,但数据会根据页面的位置而变化。页面上每个项目的填充逻辑在 fragment 的 OnCreateView 中定义,这就是为什么每次 fragment 的新实例被填充时,网络调用都会重复,即使它们在之前访问该页面时已经进行过。

我的问题是如何防止这种情况发生。我是 android 的新手,我知道我在这里遗漏了一些东西,如果我的方法有误,请指出我应该如何防止这种行为。

一些代码:在 Activity 的 oncreate 中

    ViewPager mViewPager = (ViewPager) findViewById(R.id.vpBooks);
PagerAdapter mPagerAdapter = new BooksPageAdapter(getSupportFragmentManager(), MainActivity.this, extras);
mViewPager.setAdapter(mPagerAdapter);

在viewpageradapter里面

public BooksPageAdapter(FragmentManager fm, Context context, Bundle extras) {
super(fm);
this.extras = extras;
this.cls = extras.getStringArray("cls");
this.context = context;
}

@Override
public Fragment getItem(int position) {
return BooksPageFrag.newInstance(extras, cls[position]);
}

@Override
public int getCount() {
return cls.length;
}

内部 fragment :

@Override
public void onCreateView(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

url = getArguments().getString("url");
urlFare = getArguments().getString("Fare");
Log.d("url sapf", url);
queue = Volley.newRequestQueue(this.getActivity());
getBooks();// HERE network calls are made
}

所以我想要的是,如果特定 cls[position] 的 fragment 被实例化并获取数据,那么在重新访问相同位置时它不应该进行新的网络调用

最佳答案

您需要使用 parcelable 。我认为您正在使用类对象的列表数组.按照以下步骤操作

1.) 在类对象中实现parcelable
2.) 在 OnSavedInstanceState 中使用以下代码

 @Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList("key", mListParcel);
}`

3.) 在 onCreate 方法中使用这段代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
/*Set Your RecyclerView Stuff here*/
if(savedInstanceState!=null)
{
//Fragment has been loaded earlier\
mArrayList=savedInstanceState.getParcelableArrayList("key");
//Use list here
}
else
{
//Fragment New
// Make Request Here
}
}

关于android - 如果已经对所有页面发出网络请求,如何防止 viewpager 发出网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com