NullPointer bei einem NavigationDrawer

P

Patpa

Neues Mitglied
0
Abend Leute,
habe einen NavigationDrawer in meine App eingebaut. Hierfür verwende ich das Paket "ButterKnife" um mein Menü zu gestalten. Soweit funktioniert es auch super, kann das Menü öffnen und Sachen auswählen die dann auch ausgeführt werden nur wenn ich mittels dem Befehl
Code:
mDrawerLayout.openDrawer(mNavDrawer);
mDrawerLayout.closeDrawer(mNavDrawer);
den Drawer öffnen oder schließen will bekomme ich die Fehlermeldung "NullPointerException". Verstehe das ehrlich gesagt nicht wirklich da der Drawer an sich ja funktioniert wie kann er dann null sein? Oder verstehe ich die Fehlermeldung falsch? Hier mal noch der Quelltext bis zum ersten NullPointer
Code:
public class MainActivity extends Activity 
{
	@InjectView(R.id.drawer_layout) DrawerLayout mDrawerLayout;
	@InjectView(R.id.navigation_drawer) View mNavDrawer;
	private int mNavDraverSelectedItem;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Views.inject(this);
        
        if(savedInstanceState == null)
        {
        	selectDrawerItem(R.id.mainview);
            mDrawerLayout.openDrawer(mNavDrawer);
        }
    }
Wäre super wenn mir kurz jemand sagen könnte wo mein Denkfehler ist :)
Gruß
Patpa
 
Lass dir doch erstmal anhand von bspw. Logausgaben ausgeben ob ButterKnife wirklich richtig funktioniert (also überprüfen ob mNavDrawer und mNavLayout wirklich "injected" werden). Als Alternative auch mal wieder von Hand schreiben ... (Libraries funktionieren auch nicht immer 100%ig einwandfrei^^)
 
Würde schon behaupten dass die beiden "injected" werden da der Drawer ja nach dem debbugen auf dem Tablett einwandfrei funktionieren. Nur will ich jetzt noch so kleinigkeiten einbauen wie z.b. dass der drawer wieder einklappt wenn ich etwas ausgewählt habe.
Habe ein Projekt in dem ButterKnife verwendet wird und dort funktioniert alles. Hab das Projekt mal zusammengeschnitten um zu schauen wo mein fehler liegen könnte hab aber nichts gefunden bzw verstehs nicht. Hab jetzt gehofft der Fehler wäre für erfahrene programmierer offensichtlich
 
Wo setzt du deine DrawerItems? Das sollte vll. geschehen bevor du bereits eines auswählst?
 
Schicke mal den logcat mit der Fehlermeldung.
 
Erstelle ja für den Drawer ein eigenes Layout darin hab ich Textfelder mit einem onClick handler. Wird ein TextView gewählt bekomme ich die ID mit der ich anschließend weiter arbeite.
Code:
03-22 19:21:55.155: E/AndroidRuntime(4683):     FATAL EXCEPTION: main
03-22 19:21:55.155: E/AndroidRuntime(4683):     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.smartphone/com.example.smartphone.MainActivity}: java.lang.NullPointerException
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.app.ActivityThread.access$600(ActivityThread.java:128)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.os.Looper.loop(Looper.java:137)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.app.ActivityThread.main(ActivityThread.java:4517)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at java.lang.reflect.Method.invokeNative(Native Method)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at java.lang.reflect.Method.invoke(Method.java:511)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:995)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at dalvik.system.NativeStart.main(Native Method)
03-22 19:21:55.155: E/AndroidRuntime(4683):     Caused by: java.lang.NullPointerException
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at com.example.smartphone.MainActivity.onCreate(MainActivity.java:78)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.app.Activity.performCreate(Activity.java:4579)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
03-22 19:21:55.155: E/AndroidRuntime(4683): 	... 11 more
Und kann mir mal einer sagen wie ich mehr als nur eine Zeile auswählen und exportieren kann? :unsure:
 
OKay, vielleicht sollte ich doch mal posten wie man vom Item zur Methode kommt. Die DrawerItems werden hier ja nicht über ein Array gesetzt sondern einfach über das Layout
Code:
<TextView
    	        android:id="@+id/drawer_input"
    	        style="@style/NavigationDrawerItem"
    	        android:onClick="onNavDrawevItemClicked"
    	        android:text="@string/Input" />
In der MainActivity wird dann die Id des TextViews ermittelt
Code:
public void onNavDrawevItemClicked(View v) 
    {
        selectDrawerItem(v.getId());
    }
und damit wird dann die Methode aufgerufen
Code:
 private void selectDrawerItem(int itemId) 
    {
        switch (itemId) 
        {
        case R.id.drawer_input:
        	showInput();
        	break;
        case R.id.drawer_output:
        case R.id.drawer_scatter:
        	showScatter();
        	break;
        case R.id.drawer_line:
        	showLine();
        	break;
        case R.id.drawer_pie:
        	showPie();
        	break;
        case R.id.drawer_import:
        case R.id.drawer_export:
        case R.id.mainview:
        	setNavDrawerItemFragment(itemId);
            break;
        default:
            throw new IllegalStateException();
        }
    }
Hier dann noch die Methode. Inhalt lass ich mal weg wird sonst zuviel
Code:
private void showInput() 
    {
    }
Funktioniert auch. Ich als anfänger würde sagen dass irgendwo noch eine deklaration für den Drawer fehlt ...
 

Ähnliche Themen

D
Antworten
17
Aufrufe
426
datNeMo
D
M
Antworten
3
Aufrufe
187
moin
M
Y
Antworten
4
Aufrufe
1.240
swa00
swa00
Zurück
Oben Unten