2016-07-16 7 views
0

I eine Aktivität ViewPager mit Fragmenteneine Aktivität von Fragment Starten verursacht Nullpointer

MainActivity.java enthält:

public class MainActivity extends AppCompatActivity { 
    @BindView(R.id.viewPager) ViewPager viewPager; 
    private ViewPagerAdapter pagerAdapter; 

    private void initView() { 
     pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(pagerAdapter); 
     viewPager.addOnPageChangeListener(pagerAdapter); 
    } 
} 

InfoFragment.Java:

public class InfoFragment extends Fragment implements View.OnClickListener { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View root = inflater.inflate(R.layout.fragment_info, container, false); 
     ButterKnife.bind(this, root); 
     initView(); 
     return root; 
    } 

    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(getActivity(), ContactActivity.class); 
     intent.putParcelableArrayListExtra(MainActivity.CONTACT_LIST, (ArrayList<? extends Parcelable>) contactList); 
     startActivityForResult(intent, CONTACT_ACTIVITY); 
    } 
} 

Wenn genau die onClick Methode ausführt an dieser Linie:

Intent intent = new Intent(getActivity(), ContactActivity.class); 

Diese Ausnahme tritt

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
at android.content.ComponentName.<init>(ComponentName.java:77) 
at android.content.Intent.<init>(Intent.java:4618) 
at com.swazer.smares.ui.fragments.InfoFragment$1.onClick(InfoFragment.java:128) 
at android.view.View.performClick(View.java:5217) 
at android.view.View$PerformClick.run(View.java:20983) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:6117) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

jemand eine Idee, warum das passiert ist?

+0

sollte eine Linie mit 'android.content.Context.getPackageName()' in Ihrem MainActivity. prüfen Sie. –

+2

Probieren Sie es als Intent Intent = neue Absicht (v.getContext(), ContactActivity.class); denn wie im Protokoll bedeutet 'getActivity()' 'null ' –

+0

#isnotmenow Ich denke, getPackageName() ist in der Context-Klasse definiert und es sollte nicht in meiner Aktivität sein – MoHaKa

Antwort

0

Führen Sie eine der folgenden Code ein:

1) diesen Code Versuchen:

Intent i = new Intent(getApplicationContext(), ContactActivity.class); 

2) diese in Ihre Java-Dateien:

MainActivity.java ..

public static Context cxt; 

public class MainActivity extends AppCompatActivity { 
    cxt = this; 

    @BindView(R.id.viewPager) ViewPager viewPager; 
    private ViewPagerAdapter pagerAdapter; 

    private void initView() { 
     pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(pagerAdapter); 
     viewPager.addOnPageChangeListener(pagerAdapter); 
    } 
} 

InfoFragment.java:

@Override 
    public void onClick(View v) { 
     Intent intent = new Intent(MainActivity.cxt, ContactActivity.class); 
     intent.putParcelableArrayListExtra(MainActivity.CONTACT_LIST, (ArrayList<? extends Parcelable>) contactList); 
     startActivityForResult(intent, CONTACT_ACTIVITY); 
    } 
+0

Irgendeine Idee, wie getActivity() null zurückgeben würde? – MoHaKa

+0

Ich denke, es gibt null zurück, weil Sie diese Methode aus dem Fragment aufrufen. daher wird dieser Methode kein Wert zugewiesen. Sie müssen den Kontext, der einen Wert – Saini

+0

hat, ist eine der Methoden für Sie arbeiten? – Saini