2015-08-04 3 views
2

Я загрузил демонстрационный слайдер с Android (https://developer.android.com/training/animation/screen-slide.html). Я пытался поставить это в моем проекте, но я получаю эту ошибку:Android nullpointer Screenslider (view pager)

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pws.test.demo/com.pws.test.demo.E_D_Uitgebreid}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389) 
     at android.app.ActivityThread.access$900(ActivityThread.java:169) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5479) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
     at com.pws.test.demo.E_D_Uitgebreid.onCreate(E_D_Uitgebreid.java:51) 
     at android.app.Activity.performCreate(Activity.java:5451) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389) 
      at android.app.ActivityThread.access$900(ActivityThread.java:169) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5479) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
      at dalvik.system.NativeStart.main(Native Method) 

Это мой код:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.content.Intent; 
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 
*/ 
public class E_D_Uitgebreid extends FragmentActivity { 
    /** 
    * The number of pages (wizard steps) to show in this demo. 
    */ 
    private static final int NUM_PAGES = 3; 

    /** 
    * 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_e__d__uitgebreid__fragment); 

     // 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.menu_e__d__uitgebreid, 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, D_D_RondleidingMenu.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); 
     } 

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

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

И фрагмент:

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

/** 
* A fragment representing a single step in a wizard. The fragment shows a dummy title indicating 
* the page number, along with some dummy text. 
* 
* <p>This class is used by the and {@link 
* } samples.</p> 
*/ 

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

    /** 
    * The fragment's page number, which is set to the argument value for {@link #ARG_PAGE}. 
    */ 
    private int mPageNumber; 

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

    public E_D_Uitgebreid_Fragment() { 
    } 

    @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. 
     ViewGroup rootView = (ViewGroup) inflater 
       .inflate(R.layout.activity_e__d__uitgebreid__fragment, container, false); 

     // Set the title view to show the page number. 
     ((TextView) rootView.findViewById(android.R.id.text1)).setText(
       Articles.paginatitel[mPageNumber]); 

     ((TextView) rootView.findViewById(android.R.id.text2)).setText(
       Articles.paginainhoud[mPageNumber]); 

     ((ImageView) rootView.findViewById(android.R.id.background)).setImageResource(Articles.afbeelding[mPageNumber]); 

     return rootView; 
    } 




    /** 
    * Returns the page number represented by this fragment object. 
    */ 
    public int getPageNumber() { 
     return mPageNumber; 
    } 
} 

А также деятельность в сети:

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 

public class D_D_RondleidingMenu extends AppCompatActivity { 

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


    private void SetupUitgebreideRondleidingButton() { 

     Button MessageButton = (Button) findViewById(R.id.settingsbutton); 
     MessageButton.setOnClickListener(new View.OnClickListener() { 

      @Override 

      public void onClick(View v) { 
       startActivity(new Intent(D_D_RondleidingMenu.this, E_D_Uitgebreid.class)); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_d__d__rondleiding_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

activity_e_d_uitgebreid_fragment.xml:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- Dummy content. --> 
    <LinearLayout android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="16dp"> 

     <ImageView android:id="@android:id/background" 
      android:layout_width="wrap_content" 
      android:layout_height="150dp" 

      android:layout_gravity="center_horizontal" 
      /> 

     <TextView android:id="@android:id/text1" 
      style="?android:textAppearanceLarge" 
      android:textStyle="bold" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="16dp" /> 

     <TextView android:id="@android:id/text2" 
      style="?android:textAppearanceMedium" 
      android:lineSpacingMultiplier="1.2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/lorem_ipsum" 
      /> 

    </LinearLayout> 

</ScrollView> 

Я уже изменил это, но это не сработало:

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 E_D_Uitgebreid_Fragment.create(position); 
    } 
+0

Можете ли вы показать 'com.pws.test.demo.D_D_RondleidingMenu.SetupUitgebreideRondleidingButton (D_D_RondleidingMenu.java:24)'? Потому что это не какой-либо код, который вы предоставили. – Florent

+0

Я добавил его к вопросу. – Sjcr

+0

Извините за свой xml activity_e__d__uitgebreid__fragment – br00

ответ

1

Убедитесь, что кнопка с ID R.id.settingsbutton является есть в компоновке R.layout.activity_d__d__rondleiding_menu если есть задавайте пожалуйста activity_d__d__rondleiding_menu XML

+0

Да, это было действительно неправильно, но мы все равно получаем ошибку. См. Новую ошибку logcat. Мы также тестировали его без меню, и он все еще выдавал эту ошибку. – Sjcr

+0

обеспечить также о существующем R.id.pager в XML-макете activity_e__d__uitgebreid__fragment –

+0

Спасибо, это сработало – Sjcr