我正在使用带有viewpager的tablayout来在不同的页面之间进行切换。当我使用Android版本6.0和目标Android 5.1(Lollipop)进行编译时,这可以正常工作,但是当我定位其他版本的Android(如KitKat或Ice Cream)时,我无法通过单击选项卡切换到不同的片段。 支持库支持使用ViewPager的最低版本是什么?
在我的应用中,我的主要布局设置如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include
android:id="@+id/toolbar"
layout="@menu/toolbar" />
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Bottom Tab menu -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
app:layout_scrollFlags="scroll|enterAlways"
android:layout_width="match_parent"
android:layout_height="@dimen/custom_tab_layout_height"
app:tabMode="fixed"
app:tabGravity="fill" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Yourtime.NonSwipeableViewpager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragmentContainer" />
</FrameLayout>
</RelativeLayout>
<!-- The Left Navigation Drawer -->
<android.support.design.widget.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:theme="@style/NavigationViewStyle"
android:id="@+id/nav_view"
app:menu="@menu/nav_menu" />
</android.support.v4.widget.DrawerLayout>
在MainActivity的OnCreate方法中,我有:
viewPager = FindViewById<ViewPager>(Resource.Id.viewpager);
setupViewPager(viewPager);
tabLayout = FindViewById<TabLayout>(Resource.Id.tabs);
tabLayout.SetupWithViewPager(viewPager);
设置viewpager的方法:
private void setupViewPager(ViewPager viewPager)
{
var adapter = new ViewPagerAdapter(SupportFragmentManager);
adapter.addFrag(new feedFragment(), "Home");
adapter.addFrag(new MessageFragment(), "Inbox");
adapter.addFrag(new UploadFragment(), "upload");
adapter.addFrag(new NotificationFragment(), "Notifications");
adapter.addFrag(new OneFragment(), "Five");
viewPager.Adapter = adapter;
}
是否可以将ViewPager与其他版本的Android一起使用?
修改
我正在使用NonSwipeable viewpager来禁用滑动,因此我只能通过单击tablayout按钮转到不同的视图。这是我的NonSwipebleViewPager类:
class NonSwipeableViewpager : ViewPager
{
public NonSwipeableViewpager(Context context):base(context)
{
}
public NonSwipeableViewpager(Context context, Android.Util.IAttributeSet attr)
: base(context, attr)
{
}
public override bool OnInterceptTouchEvent(MotionEvent ev)
{
return false;
}
public override bool OnTouchEvent(MotionEvent e)
{
return false;
}
}
以下是ViewPagerAdapter的代码:
class ViewPagerAdapter : Android.Support.V4.App.FragmentPagerAdapter
{
public List<V4Fragment> mFragmentList = new List<V4Fragment>();
public List<String> mFragmentTitleLis = new List<string>();
Context ctxt = null;
public ViewPagerAdapter(Context ctxt, V4FragmentManager manager)
: base(manager)
{
this.ctxt = ctxt;
}
public ViewPagerAdapter(V4FragmentManager manager) : base(manager) { }
public override Android.Support.V4.App.Fragment GetItem(int position)
{
return mFragmentList[position];;
}
public override int Count
{
get { return mFragmentList.Count; }
}
public void addFrag(V4Fragment fragment, String title)
{
mFragmentList.Add(fragment);
mFragmentTitleLis.Add(title);
}
public void addFrag(V4Fragment fragment, String title, Bundle user)
{
fragment.Arguments = user;
mFragmentList.Add(fragment);
mFragmentTitleLis.Add(title);
}
public override Java.Lang.ICharSequence GetPageTitleFormatted(int position)
{
return new Java.Lang.String(mFragmentTitleLis[position]);
}
}
答案 0 :(得分:0)
这是一个与Tablayout(Android支持设计库小部件)同步的ViewPager工作example。尝试将活动的基类从AppCompatActivity更改为FragmentActivity。