4

フラグメントがロードされた ViewPager を使用していますが、ビューページャーで現在表示または選択されているフラグメントを知りたいです。

各フラグメントのonResume()メソッドはいくつかのロジックを実行するため、現在選択されているページに隣接するフラグメント (左右) もインスタンス化されると問題が発生します。

更新しました:

フラグメントは、実際に選択されたときにコールバックを受け取りますか?

ViewPager アダプター コード:

public class LeftPanelPagerAdapter extends FragmentStatePagerAdapter
 {
private List<Fragment> fragments;

public LeftPanelPagerAdapter(FragmentManager fm,List<Fragment> fragments) 
{
    super(fm);
    this.fragments = fragments;

}

@Override
public Fragment getItem(int position) 
{
    return this.fragments.get(position);
}

@Override
public int getCount() 
{

    return this.fragments.size();
}

@Override
public int getItemPosition(Object object) 
{
    return POSITION_NONE;
}
@Override
4

6 に答える 6

3

使用するだけViewPager.getCurrentItem()で、その位置が返されます。

于 2014-05-08T09:58:15.567 に答える
2
FragmentPagerAdapter adapter = (FragmentPagerAdapter) mViewPager.getAdapter();
((IFieldServiceFragment) adapter.getItem(mViewPager.getCurrentItem()))
                .updateFragment();

ViewPager から現在のアイテムのインデックスを取得し、そのアイテム (フラグメント) を Adapter から取得できます。

于 2013-11-11T14:40:43.453 に答える
0
public class LeftPanelPagerAdapter extends FragmentStatePagerAdapter implements OnPageChangeListener{
        .....
        .....
        ....

private int currentSelectedFragmentPosition = 0; 
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }

    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    public void onPageSelected(int arg0) {
        currentSelectedFragmentPosition = arg0;

    }

    public int getCurrentSelectedFragmentPosition() {
        return currentSelectedFragmentPosition;
    }



}

OnPageChangeListener現在選択されているフラグメントの位置を追跡し続けるために使用できるメンバー変数を実装して追加できます。

現在選択されているフラグメントが何であるかを知りたいときはいつでもこれを行います

myAdapter.getCurrentSelectedFragmentPosition();
于 2012-09-29T08:17:29.640 に答える