Sup*_*oot 50 android view viewpage pager android-viewpager
我使用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) {}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想通过viewpager获取当前的焦点视图.我试过getChildAt(x),但它不起作用.
是否有一些示例,或者您是否知道如何获取当前视图?
谢谢
Mic*_* G. 88
可以通过覆盖[PagerAdapter.setPrimaryItem]来保存当前活动对象(View,Fragment,...)(http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html# setPrimaryItem%28android.view.ViewGroup,%20int,%20java.lang.Object%29)方法.例如:
private View mCurrentView;
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
mCurrentView = (View)object;
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*ren 41
你必须注册一个听众ViewPager:
pager.setOnPageChangeListener(new MyPageChangeListener());
Run Code Online (Sandbox Code Playgroud)
您必须通过扩展存根侦听器来自定义侦听器:
private int focusedPage = 0;
private class MyPageChangeListener extends ViewPager.SimpleOnPageChangeListener {
@Override
public void onPageSelected(int position) {
focusedPage = position;
}
}
Run Code Online (Sandbox Code Playgroud)
我通过查看兼容性库中的ViewPager.java源代码找到了这个.我读到我们可以做更多,例如捕获onPageScrollStateChanged.
为了构建适配器,我使用了此博客文章中的代码.你可能想看看.
art*_*nig 41
您可以在instantiateItem方法中向创建的视图添加标记:
view.setTag(position);
Run Code Online (Sandbox Code Playgroud)
稍后您可以通过以下方式访问当前所选视图:
mPager.findViewWithTag(mPager.getCurrentItem());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53715 次 |
| 最近记录: |