2

ViewPager 内のフラグメントにいくつかの TextView を設定したいと考えています。ページをインスタンス化するときに、フラグメントの onActivityCreated 関数で TextViews を設定しています。getItemPosition でPOSITION_NONEを返すいくつかの投稿によると、私の問題は解決しますが、毎回すべてのビューを削除するため、効率的な方法ではないため、instatiateItem(ViewGroup container, int position) に変更しましたが、フラグメントのビューを返すとスローされます:

ClassCastException : android.Widget.LinearLayout cannot be cast to android.support.v4.app.Fragment

ここに私の instantiateItem(ViewGroup container, int position) 関数がありますが、この例外をどのように管理できるか知っている人はいますか? または、ViewPager 内の Fragment で TextView を更新するにはどうすればよいですか? 前もって感謝します

@Override
    public Object instantiateItem(ViewGroup container, int position) 
    {
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (position == 3) {
            view = inflater.inflate(R.layout.projecttracking_detail_customerproject_fragment, null);
            ((ViewPager) container).addView(view, 0);
        }
        else if(position == 2) {
            view = inflater.inflate(R.layout.projecttracking_detail_projectinformation_fragment, null);
            ((ViewPager) container).addView(view, 0);
        }


        return view;

    }
4

1 に答える 1

1

フラグメントベースの場合、返されたオブジェクトは後でのように扱われるため、オーバーライドして a を返すViewPagerことはできません(例外があなたに伝えていること)。instantiateItem()ViewFragment

私はあなたが何を望んでいるのか完全には理解していません。フラグメントから(すべてのフラグメントから?)いくつかのビューを更新したい場合は、POSITION_NONEオプションを使用できます。

また、現在保存されているフラグメントを から更新し、ユーザーがフラグメントに向かってスワイプしたときにフラグメントが再作成されたときにViewPager、( 内の) データの他のクエリを実行することもできます。onCreateView()これを使用しFragmentPagerAdapterて、現在保存されている可視フラグメントにアクセスできます。

PageFragment pf = (PageFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.theIdOfTheViewPager + ":" + viewPager.getCurrentItem());
pf.updateViews();

viewPager.getCurrentItem()-/+1; で返される値を変更することで、他の 2 つの格納されたフラグメント (表示されているフラグメントの両側に 1 つ) を取得できます。フラグメントを変更する必要があるため、onCreateView()新しいデータがあるかどうかをテストして使用します。

を使用するFragmentStatePagerAdapterと、現在保存されているフラグメントを取得する方法もあります。

于 2013-04-21T12:04:47.090 に答える