我不熟悉在Android中使用ViewPagers
和Fragments
。我的应用的初始活动有一个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
}
}
答案 0 :(得分:0)
您将 int position 传递给onListItemClick()方法,但在get()方法中使用 pos 。尝试替换
final Integer item = items.get(pos);
与
final Integer item = items.get(position);
答案 1 :(得分:0)
您的代码有问题,但它应该有效:
检查您的姓名,您的ListingFragment
SherlockFragmentActivity
扩展Activity
,如果它是Activity
,那么您选择了一个糟糕的名字,而您还有DetailsFragment
,它扩展了相同的SherlockFragmentActivity
,似乎是Fragment
请勿使用ViewPager
适配器的片段列表,这最初会有效,但如果您旋转手机,则会遇到麻烦。您可以使用该列表,但您需要对适配器进行某些修改。
不要items
static
,因为当您对适配器的两个页面使用相同的类DetaildFragment
时,items
列表将始终指向GetItems()
返回的最后一个结果。
最后,关于items
问题,您可以与异常共享堆栈跟踪吗?您是否测试过GetItems
以查看它是否返回包含所有数据的有效列表?