Navigation Drawer

  • 135 Antworten
  • Letztes Antwortdatum
Sollte die Methode nicht von dem Fragment aufgerufen werden?

Gesendet von meinem Nexus 5 mit der Android-Hilfe.de App
 
Nein, weil ich ja durch den Startbutton der sich nicht in der Navigation befindet, ja das Spiel starte und somit die Seite wechsel
 
Du wechselt also von einem Hauptmenü Fragment zum spiel-fragment, richtig?

In welchem layout liegt der button?

Gesendet von meinem Nexus 5 mit der Android-Hilfe.de App
 
Ja, unter dem Menüpunkt "Home" ist die Seite mit den eingabefeldern und den Startbutton der dann die Seite wechselt und das spiel startet
 
Und der button liegt in der layout Datei von der activity oder von dem Fragment?

Gesendet von meinem Nexus 5 mit der Android-Hilfe.de App
 
Der liegt in dem layout welches anfangs über das Drawer Menü unter dem Punkt "home" ausgewählt werden kann. Also demnach in der activity und in nem Fragment oO soweit ich das jetzt verstanden habe

Gesendet von meinem Nexus 7 mit der Android-Hilfe.de App

Der ursprüngliche Beitrag von 20:39 Uhr wurde um 21:09 Uhr ergänzt:

Also so:

Code:
private void selectItem(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        
            switch(position)
            {
                default: break;
                case 0:
                    fragment = new FragmentMenuePunkt0();
                    break;
                    
                case 1:
                    fragment = new FragmentMenuePunkt1();
                    break;   
                    
                case 2:
                    fragment = new FragmentMenuePunkt2();
                    break; 
                    
                case 3:
                    fragment = new FragmentMenuePunkt3();
                    break;  
                    
                case 4:
                    fragment = new FragmentMenuePunkt4();
                    break; 
            }

        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        setTitle(mPlanetTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }

FragmentMenuePunkt0 hat dann den inflater für die Startseite, also die Seite wo sich der Start Button des Spiels befindet
Code:
public static class FragmentMenuePunkt0 extends Fragment
    {
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.activity_main2, container, false);
             
            return rootView;
        }
    }
 
Code:
Caused by: java.lang.NullPointerException...at de.drink.trinkmonopoly.MainActivity.densitydetect(MainActivity.java:551)

Was steht denn in Zeile 551 von MainActivity?
 
Z 551:
Code:
String erg = String.valueOf(screenDensity);

Ist ein Teil von meiner detection Methode damit ich die dpi des Gerätes ermitteln kann. Den Teil in Z. 551 werde ich am ende nicht mehr brauchen, da ich den String nur für eine Ausgabe im layout verwende
 
Na dann scheint screenDensity null zu sein...
 
mh das kommt aber irgendwie nicht hin oder, weil:

So sehen die Zeilen rund um Z 551 aus
Code:
DisplayMetrics metrics = new DisplayMetrics();    
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
screenDensity = metrics.densityDpi;  
String erg = String.valueOf(screenDensity);
TextView tw1 = (TextView)findViewById(R.id.screeen);
tw1.setText(erg);

initialisiert so:
Code:
int screenDensity = 1;

Das ganze hat ja vorher auch ohne Probleme geklappt oO
 
Code:
screenDensity = metrics.densityDpi;

Wenn dann aber metrics.densityDpi null ist kann das schon hinkommen.

Kannst ja vorher prüfen, ob es null ist.
 
Aber warum sollte metrics.densityDpi null sein? :D

Wenn ich den Seitenwechsel einfach ganz normal mit setContentView vollziehe funktioniert das ohne das die App abstürzt (Nur funktioniert dann wie gesagt das ausfahrbare Menü nicht) und die richtigen dpi werte werden mir auch angezeigt oO
 
Kommentier die Zeilen mit densityDpi doch mal aus und gucke ob es dann geht.

Stehen die Zeilen im Code der Activity oder von dem Fragment?
 
Die Zeilen mit der Density stehen in einer eigenen Methode in der Activity
Habe den Aufruf der methode nun auskommentiert jedoch das selbe ergebnis

LogCat:

Code:
11-17 07:10:06.749: D/AndroidRuntime(2939): Shutting down VM
11-17 07:10:06.749: W/dalvikvm(2939): threadid=1: thread exiting with uncaught exception 

(group=0xb2e8b648)
11-17 07:10:06.879: D/dalvikvm(2939): GC_FOR_ALLOC freed 93K, 6% free 3699K/3920K, paused 43ms, total 

50ms
11-17 07:10:06.879: E/AndroidRuntime(2939): FATAL EXCEPTION: main
11-17 07:10:06.879: E/AndroidRuntime(2939): java.lang.IllegalStateException: Could not execute method 

of the activity
11-17 07:10:06.879: E/AndroidRuntime(2939):     at android.view.View$1.onClick(View.java:3633)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at android.view.View.performClick(View.java:4240)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at android.view.View$PerformClick.run(View.java:17721)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at android.os.Handler.handleCallback(Handler.java:730)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at android.os.Looper.loop(Looper.java:137)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at android.app.ActivityThread.main

(ActivityThread.java:5103)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at java.lang.reflect.Method.invokeNative(Native Method)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at java.lang.reflect.Method.invoke(Method.java:525)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at com.android.internal.os.ZygoteInit

$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at com.android.internal.os.ZygoteInit.main

(ZygoteInit.java:553)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at dalvik.system.NativeStart.main(Native Method)
11-17 07:10:06.879: E/AndroidRuntime(2939): Caused by: java.lang.reflect.InvocationTargetException
11-17 07:10:06.879: E/AndroidRuntime(2939):     at java.lang.reflect.Method.invokeNative(Native Method)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at java.lang.reflect.Method.invoke(Method.java:525)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at android.view.View$1.onClick(View.java:3628)
11-17 07:10:06.879: E/AndroidRuntime(2939):     ... 11 more
11-17 07:10:06.879: E/AndroidRuntime(2939): Caused by: java.lang.NullPointerException
11-17 07:10:06.879: E/AndroidRuntime(2939):     at de.drink.trinkmonopoly.MainActivity.whoPlays

(MainActivity.java:1087)
11-17 07:10:06.879: E/AndroidRuntime(2939):     at de.drink.trinkmonopoly.MainActivity.startGame

(MainActivity.java:1021)
11-17 07:10:06.879: E/AndroidRuntime(2939):     ... 14 more
11-17 07:10:06.899: W/ActivityManager(1221):   Force finishing activity 

de.drink.trinkmonopoly/.MainActivity
11-17 07:10:06.909: W/WindowManager(1221): Screenshot failure taking screenshot for (246x410) to layer 

21020
11-17 07:10:07.429: W/ActivityManager(1221): Activity pause timeout for ActivityRecord{b316fa70 u0 

de.drink.trinkmonopoly/.MainActivity}
11-17 07:10:07.649: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb91fa690 

name=0x15 user=0000116a, server=00000000
11-17 07:10:08.069: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb9214050 

name=0x13 user=0000116a, server=00000000
11-17 07:10:09.479: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb915b4a0 

name=0x14 user=0000116a, server=00000000
11-17 07:10:09.719: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb92110b0 

name=0x16 user=0000116a, server=00000000
11-17 07:10:10.179: I/Choreographer(1424): Skipped 149 frames!  The application may be doing too much 

work on its main thread.
11-17 07:10:10.659: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb91fa690 

name=0x15 user=0000116a, server=00000000
11-17 07:10:10.749: I/Choreographer(1424): Skipped 148 frames!  The application may be doing too much 

work on its main thread.
11-17 07:10:11.079: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb9214050 

name=0x13 user=0000116a, server=00000000
11-17 07:10:11.279: I/Choreographer(1221): Skipped 32 frames!  The application may be doing too much 

work on its main thread.
11-17 07:10:12.489: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb915b4a0 

name=0x14 user=0000116a, server=00000000
11-17 07:10:12.729: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb92110b0 

name=0x16 user=0000116a, server=00000000
11-17 07:10:13.719: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb91fa690 

name=0x15 user=0000116a, server=00000000
11-17 07:10:14.159: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb9214050 

name=0x13 user=0000116a, server=00000000
11-17 07:10:15.559: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb915b4a0 

name=0x14 user=0000116a, server=00000000
11-17 07:10:15.759: W/AudioTrack(1221): obtainBuffer timed out (is the CPU pegged?) 0xb92110b0 

name=0x16 user=0000116a, server=00000000
 
Jetzt ist es ja Zeile 1087 von MainActivity

Gesendet von meinem Nexus 5 mit der Android-Hilfe.de App
 
Okaaay, das ist seltsam. Dort setze ich eigentlich nur einen Text anders.
Kurze Frage: Muss ich Methoden usw., die ich mit dem Seitenwechsel aufrufen will (also die ich in der Methode habe die mit dem Start-Button "verknüpft" ist) jetzt in das Fragment verschieben?


Edit: Ja, muss ich. Hab mir die Frage gerade selber beantwortet indem ich einfach alles auskommentiert habe ! Jetzt funktionierts und nach Start klick wird ein anderes Menü angezeigt !

Danke euch wiedermal vielmals für die super gute Hilfe und Unterstützung :)
 
Hey :D

So habe leider doch noch ein Problem !

Nachdem nun der Seitenwechsel und das Menü wechseln bei Button klick funktioniert ergibt sich leider ein anderes Problem.

Es werden die ganzen TextView's etc als NullPointerException angegeben, die sich auf der game Seite befinden. Woran kann das liegen?
In Eclipse selbst wird mir kein Fehler angezeigt das die Views nicht existieren oder ähnliches.
Ein Project clean habe ich bereits probiert.


Als Beispiel:
startGame (Button klick Methode)
Code:
....
changeToGameMenu();
            
if(anzspieler==2)
{
   whoPlays(view);
}

whoPlays Methode:
Code:
public void whoPlays(View view)
    {
        TextView tw1 = (TextView)findViewById(R.id.thisoneisplaying);
        switch(changer)
        {
            case 1: 
                
                    tw1.setText(player[changer+1]);  <- Hier wäre die Exception
.....


Ich kann mir das gerade nicht ganz erklären, da das ganze wie gesagt mit dem Seitenwechsel per setContentView funktionierte.

Viele Grüße
 
Das textView liegt im layout des fragments richtig? Und whoplays wird auch im Fragment aufgerufen?

Gesendet von meinem Nexus 5 mit der Android-Hilfe.de App
 
Genau
Das Fragment was in dem Fall aufgerufen wird ist die game.xml In diesem Layout liegt dieses TextView. das whoPlays wird beim start Button klick aufgerufen, jedoch nach der changeToGameMenu Methode.
 
Zurück
Oben Unten