简体   繁体   English

FragmentManager的FragmentStatePageAdapter错误(使用ViewPager处理)

[英]FragmentStatePageAdapter error with FragmentManager (dealing with ViewPager)

I am just starting to learn how to program, so sorry if this is a weird or dumb question. 我刚刚开始学习如何编程,如果这是一个奇怪或愚蠢的问题,请对不起。

I am making SlideingScreen using a ViewPager. 我正在使用ViewPager制作SlideingScreen。 I copied the code from here ( http://developer.android.com/training/animation/screen-slide.html ), but I keep getting the errors located here. 我从这里复制了代码( http://developer.android.com/training/animation/screen-slide.html ),但是我一直在这里找到错误。

在此处输入图片说明

在此处输入图片说明

Here is the code with the two thingies: 这是两个东西的代码:

package com.example.ryanfolz.gridgame;

import android.support.v4.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.NavUtils;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;

public class ScreenSlideActivity extends FragmentActivity {
/**
 * The number of pages (wizard steps) to show in this demo.
 */
private static final int NUM_PAGES = 5;

/**
 * The pager widget, which handles animation and allows swiping horizontally to access previous
 * and next wizard steps.
 */
private ViewPager mPager;

/**
 * The pager adapter, which provides the pages to the view pager widget.
 */
private PagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_screen_slide);

    // Instantiate a ViewPager and a PagerAdapter.
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
    mPager.setAdapter(mPagerAdapter);
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {

            //invalidateOptionsMenu();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.activity_screen_slide, menu);

    menu.findItem(R.id.action_previous).setEnabled(mPager.getCurrentItem() > 0);

    // Add either a "next" or "finish" button to the action bar, depending on which page
    // is currently selected.
    MenuItem item = menu.add(Menu.NONE, R.id.action_next, Menu.NONE,
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)
                    ? R.string.action_finish
                    : R.string.action_next);
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // Navigate "up" the demo structure to the launchpad activity.
            // See http://developer.android.com/design/patterns/navigation.html for more.
            NavUtils.navigateUpTo(this, new Intent(this, MainActivity.class));
            return true;

        case R.id.action_previous:
            // Go to the previous step in the wizard. If there is no previous step,
            // setCurrentItem will do nothing.
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
            return true;

        case R.id.action_next:
            // Advance to the next step in the wizard. If there is no next step, setCurrentItem
            // will do nothing.
            mPager.setCurrentItem(mPager.getCurrentItem() + 1);
            return true;
    }

    return super.onOptionsItemSelected(item);
}

/**
 * A simple pager adapter that represents 5 {@link ScreenSlidePageFragment} objects, in
 * sequence.
 */
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(FragmentManager fm) {

        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return ScreenSlidePageFragment.create(position);
    }

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

} }

The fragment is here 片段在这里

package com.example.ryanfolz.gridgame;

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


public class ScreenSlidePageFragment extends Fragment {
/**
 * The argument key for the page number this fragment represents.
 */
public static final String ARG_PAGE = "page";
ViewGroup rootView;

private int mPageNumber;

/**
 * Factory method for this fragment class. Constructs a new fragment for the given page number.
 */
public static ScreenSlidePageFragment create(int pageNumber) {
    ScreenSlidePageFragment fragment = new ScreenSlidePageFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_PAGE, pageNumber);
    fragment.setArguments(args);
    return fragment;
}

public ScreenSlidePageFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mPageNumber = getArguments().getInt(ARG_PAGE);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // Inflate the layout containing a title and body text.
    if(mPageNumber == 1){
        rootView = (ViewGroup) inflater
                .inflate(R.layout.test, container, false);
        ((TextView) rootView.findViewById(R.id.test)).setText("Hello");
    }else {
        rootView = (ViewGroup) inflater
                .inflate(R.layout.fragment_screen_slide_page, container, false);

        // Set the title view to show the page number.
        ((TextView) rootView.findViewById(android.R.id.text1)).setText(
                getString(R.string.title_template_step, mPageNumber + 1));
    }

    return rootView;
}

public int getPageNumber() {
    return mPageNumber;
}

} }

Delete these line from your import 从导入中删除这些行

import android.app.FragmentManager;
import android.app.Fragment;

When your IDE ask for which class to import, you should choose these classes from support package instead, like this: 当您的IDE要求导入哪个类时,您应该从支持包中选择这些类,如下所示:

android.support.v4.app.FragmentStatePagerAdapter;

Instead of using getFragmentManager(), you should call getSupportFragmentManager() 而不是使用getFragmentManager(),应调用getSupportFragmentManager()

I am making SlideingScreen using a ViewPager. 我正在使用ViewPager制作SlideingScreen。 I copied the code from here ( http://developer.android.com/training/animation/screen-slide.html ), but I keep getting the errors 我从此处复制了代码( http://developer.android.com/training/animation/screen-slide.html ),但我一直收到错误消息

If you check the example properly they have imported 如果您正确检查示例,则说明它们已导入

import android.support.v4.app.FragmentManager;

and not 并不是

import android.app.FragmentManager;

And also they have used 而且他们已经使用

getSupportFragmentManager()

and not 并不是

getFragmentManager()

This changes is required because you are using the android support library for your fragment. 由于您使用的是片段的android支持库,因此需要进行此更改。

In your ScreenSlideActivity file, change 在您的ScreenSlideActivity文件中,更改

import android.app.FragmentManager;

to

import android.support.v4.app.FragmentManager;

And for ScreenSlidePageFragment , change this line 对于ScreenSlidePageFragment ,更改此行

import android.app.Fragment;

into this 进入这个

import android.support.v4.app.Fragment;

At last. 最后。 Change all 全部更改

getFragmentManager()

to

getSupportFragmentManager()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用FragmentStatePageAdapter为ViewPager保留片段的位置 - Using FragmentStatePageAdapter to retain position for fragment with ViewPager 如何使用FragmentManager引用ViewPager中的片段? - How to refer to a fragment within a ViewPager with FragmentManager? FragmentManager 从活动到片段的错误 - Error in FragmentManager from activity to fragment 处理Android ViewPager,片段和内部内容 - Dealing with Android ViewPager, Fragments and stuff inside ViewPager-错误 - ViewPager - error 无法解决 fragmentmanager Android 中的方法 super() 错误 - Cannot resolve method super() error in fragmentmanager Android 错误:构造函数MainActivity.ScreenSlidePagerAdapter(FragmentManager)未定义 - Error: The constructor MainActivity.ScreenSlidePagerAdapter(FragmentManager) is undefined VS2019 更新给出 FragmentManager 错误 - VS2019 update gives FragmentManager error Android:fragmentManager出现问题(错误XML inflateExeption) - Android:Having problems with fragmentManager(Error XML inflateExeption) 错误不兼容类型:android.app.FragmentManager无法转换为android.support.v4.app.FragmentManager - Error incompatible types: android.app.FragmentManager cannot be converted to android.support.v4.app.FragmentManager
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM