我真的很新受在Android和我将不胜感激我的课程学习任何帮助。
我需要去做:
1)二ViewPagers(未嵌套)在一个活动
2)二ViewPagers(一个ViewPager嵌套在另一个ViewPager)
我发现类似的问题,但我无法使用它。 ViewPager内ViewPager
我想补充第一ViewPager,不知道接下来做什么
LayoutInflater inflater = LayoutInflater.from(this); //this - context of my activity
List<View> pages = new ArrayList<View>();
View page = inflater.inflate(R.layout.activity_main, null);
//next I adding some buttons on page
pages.add(page);
page = inflater.inflate(R.layout.activity_main2, null); //my second page
//some buttons
pages.add(page);
page = inflater.inflate(R.layout.activity_main3, null); //my third page
//some buttons
pages.add(page);
SamplePagerAdapter pagerAdapter = new SamplePagerAdapter(pages);
ViewPager viewPager = new ViewPager(this);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(0);
setContentView(viewPager);
如果我添加ViewPager2说的setContentView(viewPager2),我失去了我的viewPager1。 我花了很多时间这个两个问题,请一些帮助...
//这是我的素描什么,我需要做的。 对不起,我不能将我的scetches ...
我添加了一个OnTouchListener
到内部ViewPager
:
private OnTouchListener mSuppressInterceptListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(
event.getAction() == MotionEvent.ACTION_DOWN &&
v instanceof ViewGroup
) {
((ViewGroup) v).requestDisallowInterceptTouchEvent(true);
}
return false;
}
};
这只是检测在内ACTION_DOWN触摸事件ViewPager
并防止拦截它的外一个。 因为它返回false,只有ACTION_DOWN事件应被击中; 所有其他事件将被忽略。 您可以将此监听器添加到你想“保护”,从外部的每一个元素ViewPager
的滚动,但很明显,如果你想拿起那些元素的任何其他触摸的行为,您需要处理这些触摸监听器里和有可能实现一个更好的倾听者。
我想你应该重新考虑其另一viewpager内viewpager。 你将有很多问题与触摸事件以及用户的体验可能会造成混乱/棘手,我建议你重新考虑之一。
现在问题1:
声明在活动(/layout/activity.xml),例如xml文件既viewpagers:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
然后抬高你的活动和线材两种viewpagers的onCreate方法的XML:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
mViewpager1 = (ViewPager) findViewById(R.id.viewpager1);
mViewpager2 = (ViewPager) findViewById(R.id.viewpager2);
}
不要忘了声明这两个变量private ViewPager mViewpager1, mViewpager2;
然后,你可以做你想做与mViewpager1和mViewpager2什么。 一个提示,我建议你使用适配器设置页面,而不是由一个一个手动将其添加到每个viewpager的,这将是更清洁,更好地工作。
关于有嵌套Viewpager和禁用嵌套Viewpager刷卡溶液(如果你想设置的按钮在嵌套所选页面)
对于嵌套子类化ViewPager你添加这些:
public boolean onInterceptTouchEvent(MotionEvent event) {
//if you want to send the Touches to this Viewpager (the nested) //change true to false
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages on this inner
//send swipe to father instead of child
if (this.getParent()!=null && this.getParent() instanceof ViewPager) {
((ViewPager) this.getParent()).onTouchEvent(event);
}
return false;
}
在布局你把这个:
<com.mypackage.mycustomapp.myviews.MyViewPager
android:id="@+id/myNestedviewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>