0

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

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

清单片段.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
    }
}
4

2 回答 2

0

您将int position传递给 onListItemClick() 方法,但在 get() 方法中使用pos。尝试更换

final Integer item = items.get(pos);

final Integer item = items.get(position);
于 2013-01-17T19:30:37.230 回答
0

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

检查你的名字,你有ListingFragment哪些扩展名SherlockFragmentActivity似乎是一个Activity(如果是一个,Activity那么你选择了一个糟糕的名字),你也有DetailsFragment哪些扩展名SherlockFragmentActivity似乎是一个Fragment

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

不要这样做items static ,因为当您DetaildFragment对适配器的两个页面使用相同的类时,items列表将始终指向由GetItems().

最后,关于这个items问题,你能分享一个异常的堆栈跟踪吗?您是否测试过GetItems它是否返回包含所有数据的有效列表?

于 2013-01-17T19:55:22.783 回答