android - android Fragment 的 PagerAdapter 问题

标签 android fragment android-pageradapter

我在使用 PagerAdapter 时遇到一个问题,当我在其中加载 TextView 时,它可以正常工作,代码如下:

@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = (LayoutInflater) mActivity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.test, container, false);

    TextView tv = (TextView) view.findViewById(R.id.tvtest);
    tv.setText("" + position);

    container.addView(view);
    return view;
}

但是 当我使用 Fragment 而不是 TextView 时,如下面的代码 PagerAdapter 仅加载第一个 fragment . 请帮我解决这个问题。

@Override
public Object instantiateItem(ViewGroup container, int position) {

    LayoutInflater inflater = (LayoutInflater) mActivity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.test, container, false);

    MyFragment fragment = new MyFragment ();
    FragmentTransaction transaction = mActivity.getFragmentManager().beginTransaction();
    transaction.add(R.id.fragment_container, fragment).commit();

    container.addView(view);

    return view;
}

XML代码:

使用TextView时

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tvtest"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Test"
android:textSize="30sp" />

使用 Fragment 时

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

谢谢。

最佳答案

只需使用 FragmentPagerAdapter 而不是 PagerAdapter。

public static class MyPagerAdapter extends FragmentPagerAdapter {
    private static int NUM_ITEMS = 3;

    public MyPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    // Returns total number of pages
    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    // Returns the fragment to display for that page
    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0: // Fragment # 0 - This will show FirstFragment
            return FirstFragment.newInstance(0, "Page # 1");
        case 1: // Fragment # 0 - This will show FirstFragment different title
            return FirstFragment.newInstance(1, "Page # 2");
        case 2: // Fragment # 1 - This will show SecondFragment
            return SecondFragment.newInstance(2, "Page # 3");
        default:
            return null;
        }
    }

    // Returns the page title for the top indicator
    @Override
    public CharSequence getPageTitle(int position) {
        return "Page " + position;
    }

}

关于android - android Fragment 的 PagerAdapter 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32092367/

相关文章:

java - 将 XML 文件发送到 Android 中的 Web 服务器

android - 如何通过通知保持返回堆栈

java - 检查包名是否改变

android - Navigation.findNavController()无法找到 View

java - 如何将 AppCompatActivity 更改为 Fragment

android - 如何从 Activity 迁移到 fragment

android - 如何在更新 Adapter 后更新 ViewPager 中的 Fragments?

android - 如何在ViewPager中实现可缩放的ImageView?

android - fragment 中的可 ScrollView

android - 添加另一个项目后应用程序崩溃 - cwac-pager