2013-01-01 17 views
6

Testuję projekt android (http://developer.android.com/training/animation/screen-slide.html) i mam błąd w jednej klasie.Importowanie android.support.v13.app.FragmentActivity nie może zostać rozwiązane

/* 
* Copyright 2012 The Android Open Source Project 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

package com.example.screensidetest2; 

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v13.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 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); 
     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) { 
       // 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, 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; 
     } 
    } 
} 

dodałam słoik w libs (mam obie, V13 i v4), ale błąd nadal się powtarza. Dziękuję.

EDIT: Po zmianie V13 do v4, dużo błędów znikają pozostały tylko 2.

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

Super (fm); Konstruktor FragmentStatePageAdapter (FragmentManager) jest niezdefiniowany.

i

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

publicznego fragment GetItem (int pozycja) - typ zwrotny jest niezgodne z FragmentStatePageAdapter.getItem (int).

+1

Przepraszam TanjaV. Nie skompilowałem go, więc nie mam logcat. Błąd jest w tytule. importować android.support.v13.app.FragmentActivity; –

Odpowiedz

14

zmienić "import android.support.v13.app.FragmentActivity" na "import android.support.v4.app.FragmentActivity"

Dla nieokreślonej części, spróbuj tej składni:

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

oraz:

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

Oryginalna propozycja: Czy dodano biblioteki do ścieżki kompilacji? Wystarczy kliknąć projekt prawym przyciskiem myszy, a pozycja menu "Ścieżka tworzenia Java" zostanie wyświetlona. Wybierz to i dodaj biblioteki do swojej ścieżki.

14

byłem zablokowany na tym na chwilę i po prostu udało się go naprawić,

Spróbuj użyć getSupportFragmentManager() zamiast getFragmentManager().

3

Oto pełny kod dla dalszego odniesienia

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

Chyba powinien wyjaśnić różnicę ...

jeśli chcesz obsługiwać API < 11. Wtedy powinno import android.support.v4.app.FragmentPagerAdapter; a następnie utwórz cały Fragment przez import android.support.v4.app.Fragment; i gotowe.

API == 11

Jeśli nie chcą wspierać api <11. lub po prostu chcesz użyć prostego fragmentu (bez wsparcia), powinieneś wtedy import android.support.v13.app.FragmentPagerAdapter; wtedy getItem będzie potrzebował prostego Fragment.

@Override 
    public android.app.Fragment getItem(int position) { 
     return ScreenSlidePagerAdapter.create(position); 
    } 
Powiązane problemy