0

我是带有 Fragments 和 ViewPager (android.support.v4) 的 Android 兼容性库的新手,我在 Eclipse 中没有 JavaDocs 的情况下玩得很开心

我正在关注ViewPager 和 Fragments 上的本教程

我重用了一些代码来将片段添加到 ViewPager,同时在 foreach 循环中迭代自定义对象

private void initialisePaging() {

    List<Fragment> fragments = new Vector<Fragment>();

    for (CustomObjectClass object : getAllBalances()) {
        Fragment fragment = Fragment.instantiate(this,
                SomeCustomFragmentClass.class.getName());
        // Line below is where stacktrace points to with NullPointer
        ListView lv = ((ListView) fragment.getActivity().findViewById(
                R.id.someListView));
        // proceed setting a custom adapter to lv (ListView) then adding to list of fragments
        fragments.add(fragment);
    }
    this.mPagerAdapter = new PagerAdapter(
            super.getSupportFragmentManager(), fragments);

    ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager);

    pager.setAdapter(this.mPagerAdapter);

}

在阅读了其他答案和“google'n”一整天后,我得出的结论是,当我参考其中一个观点时,这可能与 Fragment 没有完全初始化有关。

或者我离得更远,不知道我在做什么。

我尝试将方法放在片段类中以设置适配器,并在onViewCreated()其中调用它们,但使用我的代码的当前布局会使这有点不切实际。

如果我正在做的事情不正确或效率低下,我愿意接受任何替代方案

我的目标是遍历包含数据的 CustomObject 以填充每个 Fragments ListView 并将每个 Fragment 放入 ViewPager

4

1 回答 1

0

到目前为止,唯一可能的解决方案是做我不想做的事情。

在片段中SomeCustomFragmentClass

    private CustomObjectClass object; //with getters and setters
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState){
        ListView lv = ((ListView) view.findViewById(R.id.somelistView)); 
        ((ViewPagerActivity) this.getActivity()).setAdapter(object, lv);
    }

在我的 foreach 循环中ViewPagerActivity

private void initialisePaging() {

    List<Fragment> fragments = new Vector<Fragment>();

    for (CustomObjectClass object : getAllBalances()) {
        Fragment fragment = Fragment.instantiate(this,
                SomeCustomFragmentClass.class.getName());
        ((SomeCustomFragmentClass) fragment).setObject(object);
        fragments.add(fragment);
    }
    this.mPagerAdapter = new PagerAdapter(
            super.getSupportFragmentManager(), fragments);

    ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager);

    pager.setAdapter(this.mPagerAdapter);

}
于 2012-09-06T06:21:13.330 回答