Navigation Drawer

  • 135 Antworten
  • Letztes Antwortdatum
Da fehlt aber auch ein setContentView. mDrawerLayout bleibt null, weil findViewByID nichts bringt.
 
Sicher? Das ist nämlich das Beispiel gewesen, welches ohne Probleme funktioniert hat und ich hab da wirklich nichts geändert
 
Hier ist das setContentView auch vorhanden. Und da hast du das ja her, oder?
 
ähhm ja, da hab ich das beispiel her. Wo du es sagst, stimmt. Jetzt frage ich mich aber echt, warum es aufeinmal bei mir weg war? :D
Aufjedenfall startet die App jetzt schonmal, danke !

Jetzt das nächste Problem. Wenn ich auf das Symbol klicke passiert garnichts und wenn ich von links nach rechts Streiche öffnet sich die Navigation jedoch ohne jeglichen Inhalt
 
Welchen Inhalt hat das Array "home_menu"?
Für das öffnen per Knopfdruck musst du den DrawerToggle implementieren, wie ebenfalls hier beschrieben.
 
Es ist ja alles implementiert. Auf der Seite war ein Demo Programm. Dies konnte man komplett nutzen. Funktionierte bei mir auch komplett. Jetzt bin ich gerade dabei dieses jedoch für mich zu modifizieren. ich denke das in meinen Klassen, was nicht stimmt

Code:
public static class FragmentMenuePunkt0 extends Fragment {     
   public View onCreateView(LayoutInflater inflater, ViewGroup container,  
     Bundle savedInstanceState) 
{            
 View rootView = inflater.inflate(R.layout.test, container, false);
                        return rootView;         } }
 
Das Fragment hat erstmal nichts damit zu tun, dass die Liste leer ist und du den Drawer nur durch den Swipe öffnen kannst. Zeig doch mal die komplette onCreate Methode.
 
Code:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mTitle = mDrawerTitle = getTitle();
        mPlanetTitles = getResources().getStringArray(R.array.home_menu);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        // set a custom shadow that overlays the main content when the drawer opens
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
        // set up the drawer's list view with items and click listener
        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_list_item, mPlanetTitles));
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        //  enable ActionBar app icon to behave as action to toggle nav drawer
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);

        // ActionBarDrawerToggle ties together the the proper interactions
        // between the sliding drawer and the action bar app icon
        mDrawerToggle = new ActionBarDrawerToggle(
                this,                  /* host Activity */
                mDrawerLayout,         /* DrawerLayout object */
                R.drawable.ic_drawer,  /* nav drawer image to replace 'Up' caret */
                R.string.drawer_open,  /* "open drawer" description for accessibility */
                R.string.drawer_close  /* "close drawer" description for accessibility */
                ) {
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mDrawerTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            selectItem(0);
        }
    }
 
Hmm. Und onOptionsItemSelected hast du nicht verändert, richtig?
 
Nein, habe ich genauso gelassen.

Das einzige was ich verändert habe ist folgendes:
in der onCreateView:
Code:
String planet = getResources().getStringArray(R.array.home_menu)[i];
Damit mein Array genommen wird.

Dann habe ich die selectItem so abgeändert:
Code:
private void selectItem(int position) {
        // update the main content by replacing fragments
Fragment fragment;
        
        switch(position){
            default:
            case 0:
                fragment = new FragmentMenuePunkt0();
                break;
                
            case 1:
                fragment = new FragmentMenuePunkt1();
                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);
    }

und die 2 Klassen dazu erstellt, die aber höchstwahrscheinlich so erstmal falsch sein werden(was aber wie du sagtes erstmal keine Roller spielt):
Code:
public static class FragmentMenuePunkt0 extends Fragment
    {
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.test, container, false);
            
            return rootView;
        }
    }
    
    public static class FragmentMenuePunkt1 extends Fragment
    {
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.test, container, false);
            
            return rootView;
        }
    }
 
Du kannst ja mal versuchen die beiden Klassen und selectItem auszukommentieren.
home_menu war ja ein ganz normales String-array, ne?

Sonst mal ein Clean Project machen, falls du mit Eclipse arbeitest.
 
Ja das Array ist ein ganz normales String array. Als ich anfangs nur das ersetzt habe, wurde es auch korrekt angezeigt. Ich probiere das gleich mal aus mit dem auskommentieren und dem clean

Gesendet von meinem HTC One mit der Android-Hilfe.de App
 
Ich hab das grade mal ausprobiert und die Änderungen vorgenommen, die du auch hast. Hat alles geklappt. Hab ein neues Array erstellt und die beide Fragments benutzt.
 
Das finde ich jetzt echt seltsam. Habe das Project mal gecleant, hat aber nichts gebracht. Auskommentieren hat auch nichts gebracht. Jetzt bin ich grade echt überfragt :s
 
Sonst lad das Projekt nochmal neu runter und fang nochmal von vorne an. Viel hast du ja nicht verändert. Eventuell ist dir irgendeine Zeile durch die Lappen gegangen. Ich müsste jetzt raten welche.
 
Das werde ich wohl mal morgen machen.
Was anderes bleibt mir ja jetzt nicht übrig :D
Ich wünsche dir noch einen schönen Abend :)

Gesendet von meinem HTC One mit der Android-Hilfe.de App
 
Dann viel Erfolg und sag mal Bescheid, ob es klappt ;)

Danke, wünsche ich auch!
 
So ! ich weiß woran es lag !
in meiner switch fehlte beim Default ein break!

Jetzt kann ich es ganz normal ausklappen und alle Menüpunkte stehen dort und es wird beim Klick die entsprechende Seite geladen, TOOOOPPP!! :)

Jetzt habe ich noch eine Frage: Mein Spiel besteht ja grundsätzlich aus 2 Seiten. Die erste Seite mit den Spieldateneingaben und die zweite mit dem richtigen Spiel !
Wie kriege ich es hin, dass auf der Seite mit dem Spiel andere Menüpunkte angezeigt werden als auf der Anmeldeseite?
 
Meinst du im Drawer oder in der ActionBar bei dem OverflowMenu?
 
Beim overflow Menu
Also das sozusagen ein anderes String Array geladen wird.

Gesendet von meinem HTC One mit der Android-Hilfe.de App
 
Zurück
Oben Unten