标签停止响应API级别低于22的点击

时间:2016-04-17 18:15:04

标签: android android-fragments xamarin android-viewpager android-support-library

我正在使用带有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]);
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个与Tablayout(Android支持设计库小部件)同步的ViewPager工作example。尝试将活动的基类从AppCompatActivity更改为FragmentActivity。