Reputation: 2911
I have some problems with my code. I have a NullPointerException in the code below. I'm trying to create a swipe between 3 differents fragments.
I don't understand where is my mistake so please help me :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)
Upvotes: 3
Views: 2729
Reputation: 157437
I see two main problems with your code.
View v = inflater.inflate(R.layout.milieu, container);
the container should be only used for the layout parameters and not for adding the inflated view to it. Also, the version of inflate
you are using returns the container itself. So you are looking for your view in the wrong place. Change it in
View v = inflater.inflate(R.layout.milieu, container, false);
position
is 0-index basis, so if you returns 3 in getCount
, getItem
will be called with position=0,1,2
. That means that you are returning null for the index 0Upvotes: 3