【问题标题】:Swipe not Working in android ViewPager using FragmentPagerAdapter使用 FragmentPagerAdapter 在 android ViewPager 中滑动不起作用
【发布时间】:2015-12-09 15:22:44
【问题描述】:

我想为此创建一个滑动应用程序,我在 Android 中使用ViewPager。当我运行下面的代码时,它会成功运行并打开一个蓝色的Fragment,但滑动不起作用。你能告诉我为什么吗?

这是我的Activity:

package app.learn.com.learnapp;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

import android.os.Bundle;

import java.util.List;
import java.util.Vector;

import menulistFrag.blueColor;
import menulistFrag.greenColor;
import menulistFrag.redColor;


public class MenuActivityList1 extends FragmentActivity {

    ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu_activity_list1);
        viewPager = (ViewPager)findViewById(R.id.pager);

        instantiateFrags();



    }
    public  void instantiateFrags(){
        List<Fragment> frags = new Vector<Fragment>();
        frags.add(Fragment.instantiate(this, redColor.class.getName()));
        frags.add(Fragment.instantiate(this, greenColor.class.getName()));
        frags.add(Fragment.instantiate(this, blueColor.class.getName()));
        PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager(),frags);
        viewPager.setAdapter(pagerAdapter);
        viewPager.setCurrentItem(0);
    }
}

这是我的PagerAdapter:

package app.learn.com.learnapp;


import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.List;

import menulistFrag.blueColor;
import menulistFrag.greenColor;
import menulistFrag.redColor;

/**
 * Created by root on 13/9/15.
 */

public class PagerAdapter extends FragmentPagerAdapter {
    List<Fragment> fragments;
    public PagerAdapter(FragmentManager fm,List<Fragment> fragLists){
        super(fm);
        fragments =fragLists;
    }
    @Override
    public Fragment getItem(int position) {
   return fragments.get(position);
    }

    @Override
    public int getCount() {
        return 3;

    }
}

我有三个片段:

  • redColor.java

  • greenColor.java

  • blueColor.java

这是我的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/pager">

</android.support.v4.view.ViewPager>
</LinearLayout>

【问题讨论】:

  • 为什么要使用片段。实例化方法而不仅仅是new redColor()?
  • 我已经尝试过 new redColor() 但现在仍然有效。

标签: android android-fragments android-viewpager swipe fragmentpageradapter


【解决方案1】:

您的 instantiateFrags 函数有点奇怪 - 通常您应该在 PagerAdapter 中声明片段,然后使用 Activity 的 onCreate 方法实例化 PagerAdapter 本身。您的 PagerAdapter 代码可能类似于以下内容:

public class PagerAdapter extends FragmentPagerAdapter {
    int mNumOfTabs;

    public PagerAdapter(FragmentManager fm, int NumOfTabs){
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                blueColor tab1 = new blueColor();
                return tab1;
            case 1:
                greenColor tab2 = new greenColor();
                return tab2;
            case 2:
                redColor tab3 = new redColor();
                return tab3;
            default:
                return null;
        }
    }

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

然后在主活动的 onCreate 方法中初始化 PagerAdapter(我在这里使用了 TabLayout):

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Blue"));
tabLayout.addTab(tabLayout.newTab().setText("Green"));
tabLayout.addTab(tabLayout.newTab().setText("Red"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
PagerAdapter adapter = new PagerAdapter(
        getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(
        new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {
    }

});

标签布局和分页器的xml:

 <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:layout_alignParentTop="true"
        android:theme="@style/YOUR_THEME_HERE"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/tab_layout"/>

【讨论】:

  • 首先我不想在页面上添加标签,我只想要一个全屏页面滑动,例如:在图库中滑动图像。第二:我已经尝试过 new redColor();在 getItem() 方法中,但仍然无法正常工作..
猜你喜欢
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多