2013-02-19 13 views
5

starałem się wdrożyć projekt w http://developer.android.com/training/animation/screen-slide.html android i mam błąd w jednej klasieBłąd: Konstruktor MainActivity.ScreenSlidePagerAdapter (FragmentManager) jest niezdefiniowane

import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.content.Intent; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.app.NavUtils; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 

public class MainActivity extends FragmentActivity { 
private static final int NUM_PAGES = 5; 
private ViewPager mPager; 
private PagerAdapter mPagerAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager()); 
    mPager.setAdapter(mPagerAdapter); 
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      // When changing pages, reset the action bar actions since they are dependent 
      // on which page is currently active. An alternative approach is to have each 
      // fragment expose actions itself (rather than the activity exposing actions), 
      // but for simplicity, the activity provides the actions in this sample. 
      invalidateOptionsMenu(); 
     } 
    }); 
} 
@SuppressLint("NewApi") 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    getMenuInflater().inflate(R.menu.activity_main, 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); 
} 


    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
     public ScreenSlidePagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

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


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

Buduję projekt w Androidzie 4.2.

EDIT: Zmieniłem kod do

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) { 
     super(fm); 
    } 

i

@Override 
    public android.support.v4.app.Fragment getItem(int position) { 
     return Firstframe.create(position); 
    } 

następnie występuje błąd występujące w

mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager()); 

Błąd:The constructor MainActivity.ScreenSlidePagerAdapter(FragmentManager) is undefined

+0

zobacz moją odpowiedź dla pełnego kodu dla V4: [link] (http://stackoverflow.com/questions/14111898/the-import- android-support-v13-app-fragmentactivity-can-be-resolved) – ennn791

Odpowiedz

0

Jak widzę przez ciebie kodu, widzę niezgodności klasy FragmentManager w konstruktorze, a jeden został importowany w kodzie import android.app.FragmentManager i android.support.v4.app.FragmentManager

Wystarczy sprawdzić, które FragmentManager klasa naprawdę chcesz zastosować w tym przypadku i twoi problem powinien zostać rozwiązany. Dzięki.

tj .. Wybierz na podstawie swojej decyzji:

public ScreenSlidePagerAdapter(android.app.FragmentManager fm) { 
     super(fm); 
    } 

lub

public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) { 
     super(fm); 
    } 

i użyć właściwej klasy importować w swojej klasie MainActivity.

+0

Dziękujemy za twoje rozwiązanie – user2083175

+0

Jeśli ci to pomogło, zaakceptuj lub przekaż odpowiedź. – LPD

12

Zamiast tego:

mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager()); 

Wykonaj:

mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); 

ponieważ

getFragmentManager() idzie z import android.app.FragmentManager

i

getSupportFragmentManager() idzie z android.support.v4.app.FragmentManager

+1

+1 doskonała odpowiedź z wyjaśnieniem .. –

+1

i przykład dokumentacji z Androidem uczą w niewłaściwy sposób – melanke

+0

Mam zaktualizowaną bibliotekę, ale wciąż ten sam błąd nadchodzi ... minSDK verison = 18..na sugestii. – CoDe

0
#For Full code 

package com.team.test; 

    import android.content.Intent; 
    import android.content.pm.ActivityInfo; 
    import android.os.Bundle; 
    import android.support.v4.app.FragmentActivity; 
    import android.support.v4.app.FragmentStatePagerAdapter; 
    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; 

    /** 
    * Demonstrates a "screen-slide" animation using a {@link ViewPager}. Because 
    * {@link ViewPager} automatically plays such an animation when calling 
    * {@link ViewPager#setCurrentItem(int)}, there isn't any animation-specific 
    * code in this sample. 
    * 
    * <p> 
    * This sample shows a "next" button that advances the user to the next step in 
    * a wizard, animating the current screen out (to the left) and the next screen 
    * in (from the right). The reverse animation is played when the user presses 
    * the "previous" button. 
    * </p> 
    * 
    * @see ScreenSlidePageFragment 
    */ 
    public class MenuActivity extends FragmentActivity { 
     /** 
     * The number of pages (wizard steps) to show in this demo. 
     */ 
     private static final int NUM_PAGES = 6; 

     /** 
     * 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); 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
      setContentView(R.layout.activity_screen_slide); 

      // Instantiate a ViewPager and a PagerAdapter. 
      mPager = (ViewPager) findViewById(R.id.pager); 
      mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); 
      mPager.setAdapter(mPagerAdapter); 
      mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
       @Override 
       public void onPageSelected(int position) { 
        // When changing pages, reset the action bar actions since they 
        // are dependent 
        // on which page is currently active. An alternative approach is 
        // to have each 
        // fragment expose actions itself (rather than the activity 
        // exposing actions), 
        // but for simplicity, the activity provides the actions in this 
        // sample. 
        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, Login.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. 
     */ 
     public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
      public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) { 
       super(fm); 
      } 

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

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

zmienić FragmentManager jak android.support.v4.app.FragmentManager. importować

android.support.v4.app.FragmentStatePagerAdapter; Following code for ScreenSlideActivity.java :

public class ScreenSlideActivity rozciąga FragmentActivity {

private static final int NUM_PAGES = 5; 

private ViewPager mPager; 


private PagerAdapter mPagerAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_screen_slide); 

    // Instantiate a ViewPager and a PagerAdapter. 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); 
    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); 


    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: 

      NavUtils.navigateUpTo(this, new Intent(this, MainActivity.class)); 
      return true; 

     case R.id.action_previous: 

      mPager.setCurrentItem(mPager.getCurrentItem() - 1); 
      return true; 

     case R.id.action_next: 

      mPager.setCurrentItem(mPager.getCurrentItem() + 1); 
      return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) { 
     super(fm); 
    } 

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

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

następujący kod dla ScreenSlidePageFragment.Java:

public class ScreenSlidePageFragment rozciąga Fragment {

public static final String ARG_PAGE = "page"; 


private int mPageNumber; 


public static android.support.v4.app.Fragment create(int pageNumber) { 
    android.support.v4.app.Fragment fragment = new android.support.v4.app.Fragment(); 
    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) { 

    ViewGroup 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; 
}} 
Powiązane problemy