ViewPager数据保留(ViewPager data retention)

编程入门 行业动态 更新时间:2024-10-19 02:15:36
ViewPager数据保留(ViewPager data retention)

我是Android ViewPagers和Fragments ViewPagers 。 我的应用程序的初始活动有一个ListView ,然后转到另一个活动,该活动基本上是基于从初始ListView传递的id的过滤ListView 。 我希望用户能够在不同的过滤ListViews之间滑动。 这可能是我普遍缺乏理解,但我有ViewPager功能正常工作,但当我点击过滤后的ListView中的一个项目时,我收到一个错误,因为我有一个值集合,我作为成员变量存储我在整个班级中引用,使用ViewPager时集合总是空的。

这是我到目前为止的代码:

ListingFragment.class:

public class ListingFragment extends SherlockFragmentActivity { private ViewPager mViewPager; private MyFragmentPagerAdapter mMyFragmentPagerAdapter; private static List<Fragment> fragments; @Override public void onCreate(final Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); mViewPager = (ViewPager)findViewById(R.id.viewpager); mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mMyFragmentPagerAdapter); DetailsFragment df1 = DetailsFragment.newInstance(1); fragments.add(df1); DetailsFragment df2 = DetailsFragment.newInstance(2); fragments.add(df2); } private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int index) { return fragments.get(index); } @Override public int getCount() { return 2; } } }

DetailsFragment.class

public class DetailsFragment extends SherlockFragmentActivity { private int detailId; private static List<Integer> items; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onActivityCreated(final Bundle icicle) { super.onActivityCreated(icicle); } public static DetailsFragment newInstance(int id) { DetailsFragment lf = new DetailsFragment(); Bundle bundle = new Bundle(); bundle.putInt("id", id); lf.setArguments(bundle); return lf; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.listing, container, false); detailId = getArguments().getInt("id"); items = GetItems(); return view; } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); final Integer item = items.get(pos); //this is always empty } }

I am new to using ViewPagers and Fragments in Android. The initial activity of my app has a ListView which then goes to another activity which is basically a filtered ListView based on an id passed from the inital ListView. I'd like the user to be able to swipe between the different filtered ListViews. It's probably my general lack of understanding, but I have the ViewPager functionality working fine, but when I click on an item in the filtered ListView I'm getting an error thrown because I have a collection of values I'm storing as a member variable that I reference throughout the class and the collection is always empty when using the ViewPager.

This the code I have so far:

ListingFragment.class:

public class ListingFragment extends SherlockFragmentActivity { private ViewPager mViewPager; private MyFragmentPagerAdapter mMyFragmentPagerAdapter; private static List<Fragment> fragments; @Override public void onCreate(final Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); mViewPager = (ViewPager)findViewById(R.id.viewpager); mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mMyFragmentPagerAdapter); DetailsFragment df1 = DetailsFragment.newInstance(1); fragments.add(df1); DetailsFragment df2 = DetailsFragment.newInstance(2); fragments.add(df2); } private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int index) { return fragments.get(index); } @Override public int getCount() { return 2; } } }

DetailsFragment.class

public class DetailsFragment extends SherlockFragmentActivity { private int detailId; private static List<Integer> items; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onActivityCreated(final Bundle icicle) { super.onActivityCreated(icicle); } public static DetailsFragment newInstance(int id) { DetailsFragment lf = new DetailsFragment(); Bundle bundle = new Bundle(); bundle.putInt("id", id); lf.setArguments(bundle); return lf; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.listing, container, false); detailId = getArguments().getInt("id"); items = GetItems(); return view; } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); final Integer item = items.get(pos); //this is always empty } }

最满意答案

您的代码有问题,但它应该工作:

检查你的名字,你有的ListingFragment扩展了SherlockFragmentActivity ,它似乎是一个Activity (如果它是一个Activity然后你选择了一个糟糕的名字)你还有DetailsFragment扩展了相同的SherlockFragmentActivity ,这似乎是一个Fragment

不要为ViewPager的适配器使用片段列表,这最初会起作用,但是如果你旋转手机就会遇到麻烦。 您可以使用该列表,但您需要对适配器进行某些修改。

不要使items static因为,因为对适配器的两个页面使用相同的类DetaildFragment , items列表将始终指向GetItems()返回的最后一个结果。

最后,关于items问题,您可以共享具有异常的堆栈跟踪吗? 您是否测试过GetItems以查看它是否返回包含所有数据的有效列表?

Your code has its problems but it should work:

Check your names, you have ListingFragment which extends SherlockFragmentActivity which seems to be an Activity(if it is an Activity then you picked an awful name) and you also have DetailsFragment which extends the same SherlockFragmentActivity which seems to be a Fragment

Don't use a list of fragment for the ViewPager's adapter, this will work initially but you'll get in trouble if you rotate the phone. You can use the list but you'll need to make certain modification to the adapter.

Don't make items static because, as you use the same class DetaildFragment for both pages of the adapter, the items list will always point to the last result returned by GetItems().

Finally, regarding the items problem, can you share a stacktrace with the exception? Have you tested GetItems to see if it returns a valid list with all the data?

更多推荐

本文发布于:2023-07-16 13:26:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1128967.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据   ViewPager   retention   data

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!