首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从ViewPager获取焦点视图

从ViewPager获取焦点视图
EN

Stack Overflow用户
提问于 2011-07-24 22:04:33
回答 11查看 55.8K关注 0票数 50

我使用ViewPager通过向左/向右滑动来切换视图。

ViewPager需要一个适配器,所以我构建了这个适配器:

public class ListViewPagerAdapter extends PagerAdapter {

protected static final String TAG = "ListViewPagerAdapter";
protected static final int NUM_VIEWS = 3;

protected final Activity mActivity;

public ListViewPagerAdapter(Activity activity) {
    mActivity = activity;
}

@Override
public int getCount() {
    return NUM_VIEWS;
}

@Override
public void startUpdate(View container) {}

@Override
public Object instantiateItem(View container, int position) {
    // ViewPager
    ViewPager viewPager = (ViewPager) container;

    // Wird verwendet, um die Views aufzurufen
    LayoutInflater layoutInflater = mActivity.getLayoutInflater();

    // Standardmäßig ist news eingeblendet
    View view = layoutInflater.inflate(R.layout.news_fragment, null);
    // Falls sich die Position verändert, so verändert sich auch die View
    if (position == 0) {
        view = layoutInflater.inflate(R.layout.favorite_fragment, null);
    } else if (position == 2) {
        view = layoutInflater.inflate(R.layout.videos_fragment, null);
    }

    // View einblenden
    viewPager.addView(view, 0);

    return view;
}

@Override
public void destroyItem(View container, int position, Object object) {
    // ViewPager
    ViewPager viewPager = (ViewPager) container;
    // View
    View view = (View) object;

    // View löschen
    viewPager.removeView(view);
}

@Override
public void finishUpdate(View container) {}

@Override
public boolean isViewFromObject(View view, Object object) {
    View _view = (View) object;
    return view == _view;
}

@Override
public Parcelable saveState() {
    return null;
}

@Override
public void restoreState(Parcelable state, ClassLoader loader) {}
 }

现在,我想通过视图分页获得当前的焦点视图。我尝试过getChildAt(x),但它不起作用。

有没有一些例子,或者你知道如何获得当前视图?

谢谢

EN

回答 11

Stack Overflow用户

发布于 2011-12-27 04:01:49

可以保存当前活动的对象(View、Fragment等)通过重写PagerAdapter.setPrimaryItem方法。例如:

private View mCurrentView;

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    mCurrentView = (View)object;
}
票数 89
EN

Stack Overflow用户

发布于 2011-07-26 00:48:28

你必须向你的ViewPager注册一个监听器:

pager.setOnPageChangeListener(new MyPageChangeListener()); 

您必须通过扩展存根监听器来自定义监听器:

private int focusedPage = 0;
private class MyPageChangeListener extends ViewPager.SimpleOnPageChangeListener {
    @Override
    public void onPageSelected(int position) {
        focusedPage = position;
    }
}

我通过查看compatibility library中的ViewPager.java源代码发现了这一点。我读到我们可以做更多,例如捕获onPageScrollStateChanged

为了构建适配器,我使用了代码on this blog post。你可能想看一看。

票数 41
EN

Stack Overflow用户

发布于 2012-06-24 17:57:28

您可以在instantiateItem方法中为创建的视图添加标签:

view.setTag(position);

稍后,您可以通过以下方式访问当前选定的视图:

mPager.findViewWithTag(mPager.getCurrentItem());
票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6807262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档