0

フラグメントとViewPagerを備えたAndroid互換性ライブラリ(android.support.v4)は初めてです。EclipseにJavaDocsがなくてもたくさんの楽しみがあります。

私はViewPagerとフラグメントに関するこのチュートリアルに従っていました

foreachループでカスタムオブジェクトを反復処理しながら、コードの一部を再利用してフラグメントをViewPagerに追加しました

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」を一日中読んだ後、私はそのビューの1つを参照するまでにフラグメントが完全に初期化されていないことに関係している可能性があるという結論に達しました。

または、私はさらに遠くにいて、私が何をしているのか見当がつかない。

フラグメントクラス内にメソッドを配置してアダプタを設定しようとしましたが、動作するメソッドでメソッドを呼び出すと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 に答える