我是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?
更多推荐
发布评论