webentwicklung-frage-antwort-db.com.de

Wie öffnet man die Navigationsleiste beim Klicken auf die Schaltfläche im Hauptfragment?

Ich habe eine App mit einer Aktivität erstellt, die eine Navigationsleiste zum Öffnen verschiedener Fragmente verwendet. Ich habe die actionbar drawertoggle, aber sie ist nicht sehr sichtbar ... Wenn ich einen Button in der onCreateView in meinem Hauptfragment (das Fragment, das beim ersten Start meiner App angezeigt wird) platziere, wie kann ich die Navigation dazu bringen Schublade von meiner Aktivität gesteuert?


Das scheint zu funktionieren. Die Antwort ist viel einfacher als ich dachte.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View fragView = inflater.inflate(R.layout.mainmenu, container, false);
    button1 = (Button) fragView.findViewById(R.id.button1);         
    mDrawerLayout = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)getActivity().findViewById(R.id.left_drawer);
    button1.setOnClickListener(this);
    return fragView;
}


@Override
public void onClick(View v) {       

        mDrawerLayout.openDrawer(mDrawerList);          

    }

Danke für deine Antworten.

11
user2729524

wenn Sie die Folie öffnen müssen:

mDrawerLayout.openDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

wenn Sie die Folie schließen müssen

mDrawerLayout.closeDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

BEISPIEL

mein mDrawerLayout ist hier instanziert:

mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);

mein Dia-Status:

mSlideState=false;

wenn Sie den Status des Folienmenüs kennen müssen (geschlossen, geöffnet). Verwenden Sie diesen Code:

mDrawerLayout.setDrawerListener(new ActionBarDrawerToggle(this, 
    mDrawerLayout, 
    R.drawable.ic_menu_slide,
    0,
    0){
@Override
public void onDrawerClosed(View drawerView) {                       
    super.onDrawerClosed(drawerView);
    mSlideState=false;//is Closed
}
@Override
public void onDrawerOpened(View drawerView) {                       
    super.onDrawerOpened(drawerView);
    mSlideState=true;//is Opened
}});

endlich. Sie können Ihr Click-Event folgendermaßen verwenden:

public void clickEventSlide(){
if(mSlideState){                
    mDrawerLayout.closeDrawer(Gravity.END);
}else{              
    mDrawerLayout.openDrawer(Gravity.END);
}}

in meinem Fall ist mein Folienmenü auf der rechten Seite (Gravity.END), aber wenn Sie auf der linken Seite benötigen, versuchen Sie es mit Gravity.START

Diese Arbeit für mich, ich hoffe dein Problem gelöst.

52

wenn Sie die Standardnavigationsaktivität in Android verwenden, müssen Sie nur diesen Code in den Klick-Listener der Schaltfläche ---> einfügen

mDrawerLayout.openDrawer(Gravity.START);

zum Schließen müssen Sie nichts tun.

6
behrad

Um die Symbolleiste als App-Leiste anzuwenden, stellen Sie zunächst sicher, dass Ihre Aktivität von AppCompatActivity ausgeht. Rufen Sie dann setSupportActionBar () auf und übergeben Sie das Toolbar-Objekt aus Ihrem Layout:

    toolbar=(Toolbar) findViewById(R.id.toolbar_main);
    setSupportActionBar(toolbar);
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp);

    drawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,R.string.navigation_drawer_open,
            R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    if (drawerLayout.isDrawerOpen(GravityCompat.START)){
        drawerLayout.closeDrawer(GravityCompat.START);
    }
    else{
        super.onBackPressed();
    }
}

}

1
Kumar Ajay A.K

Ich habe eine viel einfachere Lösung mit isDrawerOpen()

Die Navigationsleiste wird automatisch geschlossen oder geöffnet (basierend auf dem aktuellen Status der Schublade)

    Button hamMenu = findViewById(R.id.ham_menu);
    hamMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            DrawerLayout navDrawer = findViewById(R.id.drawer_layout);
            // If navigation drawer is not open yet open it else close it.
            if(!navDrawer.isDrawerOpen(GravityCompat.START)) navDrawer.openDrawer(Gravity.START);
            else navDrawer.closeDrawer(Gravity.END);
        }
    });
0
Sapnesh Naik

Verwenden Sie das Standard-Callback-Modell wie hier beschrieben:

http://developer.Android.com/training/basics/fragments/communicating.html

Wenn Sie die Taste drücken, initiieren Sie einen Rückruf für die Aktivität und lassen Sie Ihre Schublade öffnen.

0
Kuffs

Verwenden Sie diese Zeilen, um die Schublade bei einem bestimmten Ereignis zu öffnen und zu schließen:

Code-Snippet zum Öffnen der Schublade:

drawerLayout.openDrawer(Gravity.START);

Code-Snippet zum Schließen der Schublade:

drawerLayout.closeDrawer(Gravity.LEFT);

openDrawer(gravity_of_navigation_view_to_be_shown)

in openDrawer ("Schwerkraft") müssen Sie im Abschnitt "Schwerkraft" die Schwerkraft der Navigationsansicht wie oben angegeben eingeben:

Gravity.LEFT
Gravity.RIGHT
Gravity.START
Gravity.END

Ich denke das ist die beste Antwort.

0
Muhammad Awais