在 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>
最佳答案
我有解决方案你只需像这样更改 MyFragment
的 onCreateView(....)
。
@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(....)
中移除代码
这是输出:
关于java - ViewPager 显示页面不按顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27818622/