【问题标题】:viewpager inside of framelayout框架布局内的viewpager
【发布时间】:2014-09-23 05:44:44
【问题描述】:

我的例子是由一个Mainactivity.java(FragmentActivity)、一个叫Fragment_ViewPager(Fragment)的Fragment、一个适配器Adapter_ViewPager(FragmentPagerAdapter)和三个fragment组成的普通fragment Fragment extentienden并有一个方法onCreateView。

Mainactivity.java

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager FM = getSupportFragmentManager();
        FragmentTransaction FT = FM.beginTransaction();

        Fragment_ViewPager f_pager = new Fragment_ViewPager();
        FT.add(R.id.fragment_container, f_pager);
        FT.commit();

    }
}

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</FrameLayout>

Fragment_ViewPager.java

private static final int[] ICONS = new int[] { R.drawable.ic_launcher,  R.drawable.ic_launcher,  R.drawable.ic_launcher };
    private FragmentPagerAdapter mFragmentPagerAdapter;
    private ViewPager mViewPager;
    private TabPageIndicator mTabPagerIndicator;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.f_pager, container, false);

        mFragmentPagerAdapter = new Adapter_ViewPager(getActivity().getSupportFragmentManager(), ICONS);
        mViewPager = (ViewPager)v.findViewById(R.id.view_pager_inicio);
        mViewPager.setAdapter(mFragmentPagerAdapter);
        mTabPagerIndicator = (TabPageIndicator)v.findViewById(R.id.tab_indicator_inicio);
        mTabPagerIndicator.setViewPager(mViewPager);


        return v;

    }

fragment_viewpager.xml

<?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" >


    <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/tab_indicator_inicio"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        />

        <android.support.v4.view.ViewPager
        android:id="@+id/view_pager_inicio"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />

</LinearLayout>

Adapter_ViewPager.java

private static int[] ICONS = null;
    private Fragment mFragment = null;

    public Ad_inicio(FragmentManager fm,  int[] icons) {
        super(fm);
        ICONS = icons;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            mFragment = new Fragmento_uno();
            break;
        case 1:
            mFragment = new Fragmento_dos();
            break;
        case 2:
            mFragment = new Fragmento_tres();
            break;
        default:
            break;
        }
        return mFragment;
    }



    @Override
    public int getIconResId(int index) {
        return ICONS[index];
    }

    @Override
    public int getCount() {
        return ICONS.length;
    }

Fragment_One.java

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragmento_One, container, false);

        return v;

    }

fragment_one.xml

<?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" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="uno" />

</LinearLayout>

片段的滑动效果很好,但问题是当我将设备的方向从纵向更改为水平时,滑动不起作用并且在垂直方向之前只显示 fagemnto ... 我想知道我做错了什么,因为 viewpager 必须在 FragmentAcitivity 中运行,但是对于这个例子,我必须扩展 Fragment 以使用dentrod FrameLayout,看起来像它的getActivity()。 GetSupportFragmentManager () 我将他发送给 Adpater 的第二次操作不正确。

【问题讨论】:

    标签: java android android-layout android-fragments


    【解决方案1】:

    不要为Adapter_ViewPager 类使用其他构造函数,而不是默认的constructor(FragmentManager)

    我认为,当您的 Activity 重新启动时,Android 会调用默认构造函数,而 ICONS 将为 null。

    尝试在那里放置一个断点,看看,旋转后ICONS 的值是多少。

    【讨论】:

    • 非常感谢您的回答.. 我刚刚尝试放置一个断点,如果它返回一个数字 ICONS 3,看来问题是我再次识别了在主要活动中找到的 FragmentManaget 片段。 . 我尝试做的是这样的事情。 s21.postimg.org/a497zxtxz/Imagen_View_Pager.png
    • 我通过更改接收 FragmentPagerAdapter 的 getSupportFragmentManager () 解决了这个问题,通过 getChildFragmentManager () 但现在的问题是,当时显示的片段方向的变化保持在上面另一个,好像没有被抹去一样。