【问题标题】:How can i getCurrentView by position in a ViewPager?如何按 ViewPager 中的位置获取当前视图?
【发布时间】:2014-07-15 00:01:30
【问题描述】:

我需要在 ViewPager 中按位置获取当前视图

这是我的 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) {
    }
}

【问题讨论】:

    标签: android


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以使用FragmentPagerAdapter 而不是ViewPagerAdapter,它具有getItem(int position) 方法,您可以使用它轻松访问视图。

      你可以看看这个帖子:Android Return back to same fragment after click on goto first fragment in view pager

      希望对您有所帮助!

      【讨论】:

        【解决方案3】:

        这是有争议的。你到底需要什么?当前视图或按位置查看。恕我直言,这是不同的事情。 当前观点:

        currentView = viewPager.getCurrentItem();
        

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

        currentView = viewPager.getChildAt(currentPosition);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-27
          相关资源
          最近更新 更多