如何在ViewPager中按位置获取CurrentView?

时间:2014-07-10 19:58:33

标签: android

我需要在ViewPager中按位置使用getCurrentView

这是我的ViewPagerAdapter

public class TutorialViewPagerAdapter extends ViewPagerAdapter {

    private LayoutInflater mInflater;
    private View view;
    private List<Integer> views;

    public TutorialViewPagerAdapter(Activity act, List<Integer> views) {
        super(act, null);
        this.views = views;
        this.mInflater = LayoutInflater.from(this.activity);
    }

    @Override
    public void destroyItem(View container, int arg1, Object view) {
        ((ViewPager) container).removeView((View) view);
    }

    @Override
    public int getCount() {
        return views.size();
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {

        int viewId = (Integer) views.get(position);
        this.view = mInflater.inflate(viewId, null);

        ((ViewPager) collection).addView(view);

        return view;

    }
}

这是我的活动

public class Tutorial extends FragmentActivity implements
        ViewPager.OnPageChangeListener {

    private List<Integer> views;
    private TutorialViewPagerAdapter viewPagerAdapter;
    private ViewPager viewPager;
    private CirclePageIndicator circlePageIndicator;
    private int currentViewId;
    private View currentView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tutorial);

        init();

    }

    private void init() {
        views = new ArrayList<Integer>();
        views.add(R.layout.tutorial_step_one);
        views.add(R.layout.tutorial_step_two);
        views.add(R.layout.tutorial_step_three);
        views.add(R.layout.tutorial_step_four);
        views.add(R.layout.tutorial_step_five);

        viewPagerAdapter = new TutorialViewPagerAdapter(this, views);

        viewPager = (ViewPager) findViewById(R.id.steps_view_pager);

        circlePageIndicator = (CirclePageIndicator) findViewById(R.id.steps_indicator);

        viewPager.setAdapter(viewPagerAdapter);
        viewPager.setCurrentItem(0, false);

        circlePageIndicator.setViewPager(viewPager);
        circlePageIndicator.setCentered(true);
        circlePageIndicator.setPadding(20, 20, 20, 20);
        circlePageIndicator.notifyDataSetChanged();
        circlePageIndicator.setCurrentItem(0);

        viewPager.setOnPageChangeListener(this);

    }

    @Override
    public void onPageScrollStateChanged(int state) {
        int currentPosition = viewPager.getCurrentItem();
        circlePageIndicator.setCurrentItem(currentPosition);
        enableStep(currentPosition);
    }

    private void enableStep(int currentPosition) {

        /*viewPagerAdapter.getItemPosition(object)      
        currentView = viewPager.getChildAt(viewPager.getRootView());
        Log.d("DEBUG", currentView.toString() + " CURRENT VIEW");*/

    }

    @Override
    public void onPageScrolled(int position, float positionOffset,
            int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
    }
}

3 个答案:

答案 0 :(得分:1)

您可以将instantiateItem中创建的所有视图添加到ArrayList<View>,然后创建一个公共方法,以使用get(position)从ArrayList获取视图。但要小心,一旦活动结束,视图可能是null

答案 1 :(得分:0)

您可以使用ViewPagerAdapter方法代替FragmentPagerAdapter,而getItem(int position)方法可以使用{{1}}方法轻松访问视图。

你可以看一下这篇文章:Android Return back to same fragment after click on goto first fragment in view pager

希望这有帮助!!

答案 2 :(得分:0)

这没有实际意义。你究竟需要什么?按位置的当前视图或视图。 Imho它是不同的东西。 当前观点:

currentView = viewPager.getCurrentItem();

或按索引查看(传递错误的参数 - 应为int):

currentView = viewPager.getChildAt(currentPosition);