片段在 ViewPager 中不可见

jub*_*kon 3 android adapter android-fragments android-viewpager

我有一个ViewPager我想添加片段的。ViewPager 可以在屏幕上正确查看,但不幸的是它不包含任何内容。

我在一些帖子中看到了替换的建议

getSupportFragmentManager() 
Run Code Online (Sandbox Code Playgroud)

getChildFragmentManager()
Run Code Online (Sandbox Code Playgroud)

但我需要ActionBar. 不幸的ChildFragmentmanager是,在AppCompatActivity.

在调试时,我意识到 Fragment 的onCreateView()方法被调用并返回一个布局。

问题:我怎样才能使Fragments可见?是我的代码与该示例的主要区别什么?

活动:

public class ViewPagerActivity extends AppCompatActivity {

    private ViewPager mViewPager;

    private List<Location> locationList = new ArrayList<>();
    private locationsBaseHandler db;
    private CustomPagerAdapter mAdapter;

    private Location mLocation;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_viewpager);

        locationList.add(someData);

        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mAdapter  = new CustomPagerAdapter(this, getSupportFragmentManager(), locationList);

        mViewPager.setAdapter(mAdapter);

    }

}
Run Code Online (Sandbox Code Playgroud)

寻呼机适配器:

public class CustomPagerAdapter extends FragmentPagerAdapter {

    private Context mContext;
    private List<Location> locationList = new ArrayList<>();

    public CustomPagerAdapter(Context mContext, FragmentManager fm, List<Location> locationList) {
        super(fm);

        this.locationList.addAll(locationList);
        this.mContext = mContext;
    }

    @Override
    public Fragment getItem(int position) {
        return LocationFragment.newInstance(position);
    }

    @Override
    public int getCount() {
        return 5;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

分段:

public class LocationFragment extends Fragment {
    private static final String ARG_LAYOUT_ID = "page_number";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View layout = inflater.inflate(R.layout.fragment_location, container, false);

        return layout;
    }

    public static LocationFragment newInstance(int selectedIdForIndex) {
        LocationFragment fragment = new LocationFragment();

        Bundle args = new Bundle();
        args.putInt(ARG_LAYOUT_ID, selectedIdForIndex);
        fragment.setArguments(args);

        return fragment;
    }

    public int getPageNumber() {
        return getArguments().getInt(ARG_LAYOUT_ID);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ell*_*Zou 6

尝试删除方法isViewFromObjectCustomPagerAdapter

@Override
public boolean isViewFromObject(View view, Object object) {
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我们可以看到这条评论isViewFromObject

确定页面视图是否与 {@link #instantiateItem(ViewGroup, int)} 返回的特定键对象相关联。PagerAdapter 需要此方法才能正常运行。