gpt4 book ai didi

android - 如何避免将 Fragment 重新创建到 ViewPager 中?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:40 26 4
gpt4 key购买 nike

我正在使用一个 ViewPager 和一个包含 5 个页面的 FragmentStatePagerAdapter

在第一页中,我有一个包含项目的 ListView。当我在 ViewPager 的最后一页更改并返回到第一页时,我的 ListView 是空的,因为已重新创建适配器。

Android 总是调用下一个方法:onAttach()、onCreate()、onCreateView()、onViewCreated()、onActivityCreated()、onStart() 和 onResume()。

我不想使用 ViewPager.setOffscreenPageLimit() 方法来避免我的页面被破坏。有什么替代方案吗?

我想要的行为与 Facebook 相同。

我做错了什么?如何将数据保存在我的 ListView 中?

我的 FragmentStatePageAdapter 代码:

public class AdapterMain extends FragmentStatePagerAdapter {
List<ChicfyFragment> fragments = new ArrayList<ChicfyFragment>();

public AdapterMain(FragmentManager fm) {
super(fm);

fragments.add(new FragmentShop());
fragments.add(new FragmentSearch());
fragments.add(new FragmentSell());
fragments.add(new FragmentNotification());
fragments.add(new FragmentProfile());
}

@Override
public Fragment getItem(int position) {
return fragments.get(position);
}

@Override
public int getCount() {
return fragments.size();
}
}

我的ViewPager第一页的代码:

public class FragmentShop extends ChicfyFragment implements SwipeRefreshLayout.OnRefreshListener {

ListView mListView;
AdapterProductList mAdapter;
SwipeRefreshLayout mSwipeRefreshLayout;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main_shop, container, false);

mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh);
mListView = (ListView) view.findViewById(R.id.fragment_main_shop_listview);

return view;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

// setup adapter
mAdapter = new AdapterProductList((FragmentActivity) getActivity(), new ArrayList());

// setup listview
mListView.setAdapter(mAdapter);
mListView.setDivider(null);

// setup swipe
mSwipeRefreshLayout.setColorScheme(R.color.red, R.color.white, R.color.blue, R.color.white);
mSwipeRefreshLayout.setOnRefreshListener(this);
}

@Override
public void onRefresh() {
new AsyncTask<Void, Void, Void>() {
List<String> list = new ArrayList<String>();

@Override
protected Void doInBackground(Void... voids) {
try {
Thread.sleep(1000);
for(int i=0; i<10; i++) list.add("" + i);
} catch (Exception e) {}
return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);

mAdapter.clear();
mAdapter.addAll(list);
mAdapter.notifyDataSetChanged();

mSwipeRefreshLayout.setRefreshing(false);
}
}.execute();
}
}

最佳答案

您可以将此行用于 X 个 fragment

mViewPager.setOffscreenPageLimit(X);

关于android - 如何避免将 Fragment 重新创建到 ViewPager 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26256414/

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