簡體   English   中英

使用FragmentPagerAdapter在Android ViewPager中滑動不工作

[英]Swipe not Working in android ViewPager using FragmentPagerAdapter

我想為此創建一個滑動應用程序,我在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>

你的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"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM