java - ViewPager 显示页面不按顺序

标签 java android android-fragments android-viewpager

在 StackOverflow 中彻底搜索之后... 我正在使用 ViewPager 来显示 fragment ,每个 fragment 都应该显示它的页面。 例如: | 0| 1| 2| 3| 4| 5| 但我得到它的顺序不正确,有时不显示任何内容。 例如: |1 | -向右滑动- | <空白屏幕> | -向右滑动- |<清空屏幕>| -向左滑动- | 0|

这是我的代码: MainActivitiy.java:

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends FragmentActivity{

    private ViewPager mViewPager;
    private MyFragmentPagerAdapter mPagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mViewPager = (ViewPager) findViewById(R.id.calendarGridPager);
        mPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mPagerAdapter);
    }

}

MyFragment.java:

    import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyFragment extends Fragment{
    private static final String ARG_PAGE = "page";
    private int mPageNumber;
    private TextView mTextView;

    public static MyFragment newInstance(int pageNumber) {
        MyFragment fragment = new MyFragment();
         Bundle args = new Bundle();
         args.putInt(ARG_PAGE, pageNumber);
         fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
         mPageNumber = getArguments().getInt(ARG_PAGE);
        return  inflater.inflate(R.layout.calendar_month_grid, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mTextView = (TextView) getActivity().findViewById(R.id.fragmentDataTextView);
        mTextView.setText(String.valueOf(mPageNumber));
    }

    public int getPageNumber() {
        return mPageNumber;
    }   
}

MyFragmentPageAdapter.java:

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

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{

    private static final int NUM_ITEMS = 6;
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment item = (Fragment)  MyFragment.newInstance(position);
        return item;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return super.isViewFromObject(view, object);
    }
    @Override
    public int getCount() {
        return NUM_ITEMS;
    }


}

activity_main.xml:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.trashproject.MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/calendarGridPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         />

</RelativeLayout>

calendar_month_grid.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/fragmentDataTextView"
        android:textSize="80sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

最佳答案

我有解决方案你只需像这样更改 MyFragmentonCreateView(....)

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState) {
    View root= inflater.inflate(R.layout.calendar_month_grid, container, false);
    mPageNumber = getArguments().getInt(ARG_PAGE);
    System.out.println("in onCreateView: "+mPageNumber);
    mTextView = (TextView)root.findViewById(R.id.fragmentDataTextView);
    mTextView.setText(String.valueOf(mPageNumber));
    return root;
}

并从 onActivityCreated(....) 中移除代码

这是输出:

enter image description here

enter image description here

enter image description here

关于java - ViewPager 显示页面不按顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27818622/

相关文章:

java - 从 Java 应用程序发布推文

java - 在 Controller 之前使用拦截器编辑对象的值

java - WireMock - 在 POST stub 工作正常时, stub GET 与 body 不工作

android - FindViewById 在 fragment 中

java - 如何使用 java 从 kotlin 类读取回调 (Android)

java - 从 Android 访问云存储

Android - 在 RecyclerView 的图像中点击动画作为 Whatsapp

java - 根据时基设置时间选择器

android - 如何在多个 fragment 中处理相同的 onClick 操作而不重复代码?

android - 无法更新 FragmentPagerAdapter 中的 fragment