Je ne sais pas comment utiliser findViewById(R.id.nav_timetable);
sans qu'il retourne null et créer un NPE. Ce que j'essaie de faire est de faire en sorte que le TimetableFragment soit chargé par défaut et que les gens puissent utiliser le tiroir pour aller à d'autres fragments.Comment utiliser findViewById() dans onCreate sans qu'il renvoie null?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setupDrawer(toolbar);
drawer.openDrawer(GravityCompat.START); // Opened this on first run so they know what's in it.
// TODO Change this later to a home page and remove goToTimetablePage();
// goToTimetablePage();
goToFragmentFromNavMenuItem((MenuItem) findViewById(R.id.nav_timetable));
}
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
// Handle navigation view item clicks here.
goToFragmentFromNavMenuItem(menuItem);
return true;
}
private void goToFragmentFromNavMenuItem(MenuItem menuItem) {
// Create a new fragment and specify the fragment to show based on nav item clicked
Fragment fragment = null;
Class fragmentClass;
switch (menuItem.getItemId()) {
case R.id.nav_slideshow: // TODO fragmentClass = SlideshowFragment.class; break;
case R.id.nav_share: // TODO fragmentClass = ShareFragment.class; break;
case R.id.nav_timetable:
fragmentClass = TimetableFragment.class;
// goToTimetablePage();
break;
default:
fragmentClass = TimetableFragment.class;
// TODO Change this later to a home page:
// TODO fragmentClass = HomeFragment.class; Remove "goToTimetablePage();"
}
//noinspection TryWithIdenticalCatches
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
drawer.closeDrawer(GravityCompat.START);
}
Message d'erreur:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gmail.gogobebe2.thedayahead/com.gmail.gogobebe2.thedayahead.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'int android.view.MenuItem.getItemId()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int android.view.MenuItem.getItemId()' on a null object reference
at com.gmail.gogobebe2.thedayahead.MainActivity.goToNavFragment(MainActivity.java:123)
at com.gmail.gogobebe2.thedayahead.MainActivity.onCreate(MainActivity.java:59)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
J'essayé d'utiliser la méthode onCreateView
mais il vient de faire des messages stackoverflow pour une raison quelconque.
EDIT: Voici tout le code pour effacer toute confusion: https://github.com/gogobebe2/TheDayAhead
EDIT2: Assurez-vous que vous ne vous inquiétez pas au sujet de la méthode goToTimetablePage()
. Il est inutilisé pour le moment et je prévois de le déplacer vers le fragment TimetableFragment
.
EDIT3: J'ai changé le nom de la méthode en goToFragmentFromNavMenuItem()
pour mieux décrire ses actions pour éclaircir les choses. Je veux aussi que vous sachiez que la méthode onNavigationItemSelected(MenuItem menuItem)
fonctionne parfaitement avec la méthode goToFragmentFromNavMenuItem()
, c'est juste que ça ne fonctionne pas quand elle est utilisée à l'intérieur onCreate(Bundle savedInstanceState)
à cause du findViewById(R.id.nav_timetable)
retournant null
tout le temps.
En outre, ceci est ma première application Android que j'ai jamais faite et j'apprends un peu comme je le fais. Je ne savais même pas quels fragments étaient la nuit dernière, donc je suis vraiment nouveau sur Android, s'il vous plaît n'assumez aucune connaissance.
poster votre R.layout.activity_main –