2014-07-10 87 views
3

我有我的代碼的一些問題。我在下面的代碼中有一個NullPointerException。 我試圖在3個不同的片段之間創建一個滑動。NullPointerException與片段和ViewPager

我不明白的地方是我的錯誤,請幫我:P

DummyFragment.java:

package com.example.testslide; 

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

public class DummyFragment extends Fragment { 

    public static DummyFragment newInstance(String chaine) { 
     DummyFragment fragment = new DummyFragment(); 
     Bundle args = new Bundle(); 
     args.putString("KEY_STRING", chaine); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.milieu, container); 
     TextView textView = (TextView) v.findViewById(R.id.textView1); 
     Bundle args = getArguments(); 
     textView.setText(args.getString("KEY_STRING")); 
     return v; 
    } 

} 

ViewPagerAdapter

package com.example.testslide; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class ViewPagerAdapter extends FragmentPagerAdapter { 
    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int pos) { 
     switch(pos) { 
     case 1: return DummyFragment.newInstance("Je suis le premier écran !"); 
     case 2: return DummyFragment.newInstance("Je suis le second écran !"); 
     case 3: return DummyFragment.newInstance("Je suis le troisième écran !"); 
     } 
     return null; 
    } 

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

ViewPagerActivity:

package com.example.testslide; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 


public class ViewPagerActivity extends FragmentActivity { 
    private ViewPagerAdapter mSectionsPagerAdapter; 
    private ViewPager mViewPager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewpager); 
     // Set up the adapter. 
     mSectionsPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.viewPager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 
    } 
} 

viewpager.xml:

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/viewPager"> 
</android.support.v4.view.ViewPager> 

milieu.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 


    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="20dp" 
     android:text="Page du milieu" /> 

</LinearLayout> 

的logcat:

07-10 08:25:26.211: E/AndroidRuntime(607): FATAL EXCEPTION: main 
07-10 08:25:26.211: E/AndroidRuntime(607): java.lang.NullPointerException 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:394) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:389) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:99) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.support.v4.view.ViewPager.populate(ViewPager.java:982) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.View.measure(View.java:10828) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4351) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.widget.FrameLayout.onMeasure(FrameLayout.java:267) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.View.measure(View.java:10828) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4351) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.widget.LinearLayout.measureVertical(LinearLayout.java:613) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.widget.LinearLayout.onMeasure(LinearLayout.java:519) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.View.measure(View.java:10828) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4351) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.widget.FrameLayout.onMeasure(FrameLayout.java:267) 
07-10 08:25:26.211: E/AndroidRuntime(607): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:1889) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.View.measure(View.java:10828) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.ViewRoot.performTraversals(ViewRoot.java:938) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.view.ViewRoot.handleMessage(ViewRoot.java:2040) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.os.Looper.loop(Looper.java:132) 
07-10 08:25:26.211: E/AndroidRuntime(607): at android.app.ActivityThread.main(ActivityThread.java:4123) 
07-10 08:25:26.211: E/AndroidRuntime(607): at java.lang.reflect.Method.invokeNative(Native Method) 
07-10 08:25:26.211: E/AndroidRuntime(607): at java.lang.reflect.Method.invoke(Method.java:491) 
07-10 08:25:26.211: E/AndroidRuntime(607): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
07-10 08:25:26.211: E/AndroidRuntime(607): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
07-10 08:25:26.211: E/AndroidRuntime(607): at dalvik.system.NativeStart.main(Native Method) 

回答

3

我看到你的代碼的兩個主要問題。

  • View v = inflater.inflate(R.layout.milieu, container);

容器應僅用於佈局參數,而不是用於將膨脹的視圖到它。此外,您使用的版本inflate會返回容器本身。所以你在錯誤的地方尋找你的觀點。在

View v = inflater.inflate(R.layout.milieu, container, false);

  • position更改爲0指數的基礎上,因此,如果您返回3 getCountgetItem將與position=0,1,2調用。這意味着您索引爲0返回0
+0

非常感謝您的工作! :) – Maxouille