5

Sto provando a sviluppare un'applicazione utilizzando il modello del cassetto di navigazione di Android Studio. Quindi, ho creato un nuovo progetto usando questo modello. Ma quando eseguo il programma e clicco su una voce di menu, la vista non cambia. Ho cercato ovunque su internet, ma non ho visto come posso gestirlo.Cassetto di navigazione per studio Android con frammento o attività

Questo è il codice fornito da Android Studio:

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 

    int id = item.getItemId(); 

    if (id == R.id.nav_camara) { 


    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

Quello che voglio ottenere è quello di sostituire la vista corrente con la vista appropriata per la voce di menu cliccato.

Fragment è il modo migliore per farlo oppure devo creare un'attività diversa per ciascuna voce di menu?

+0

si dovrebbe usare frammento perché facile utilizzo cassetto stesso la navigazione all'interno di un'attività. – GiapLee

risposta

17

Nel tuo caso l'aggiunta di frammenti sarà la soluzione migliore.

creare un frammento BlankFragment.java

public class BlankFragment extends Fragment { 

    public BlankFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_blank, container, false); 
    } 

} 

e creare fragment_black.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.above_inc.shyam.drawer.BlankFragment"> 

    <!-- TODO: Update blank fragment layout --> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_blank_fragment" /> 

</FrameLayout> 

oggi sostituiscono il metodo di

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    Fragment fragment = null; 
    if (id == R.id.nav_camera) { 
     // Handle the camera action 
     fragment = new BlankFragment(); 
    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.frame_container, fragment).commit(); 

    } 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 

} 

Aggiungi sotto codice nel tuo content_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.above_inc.shyam.drawer.MainActivity" 
    tools:showIn="@layout/app_bar_main"> 


    <FrameLayout 
     android:id="@+id/frame_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 
</RelativeLayout> 

è anche possibile aggiungere ulteriori frammento ad altre opzioni stesse come macchina fotografica nel codice sopra

+0

Questa soluzione funziona @DHAKAD. – Royken

2

Il frammento sarà il modo migliore se si desidera visualizzare il cassetto di navigazione nella schermata successiva quando si fa clic sulla voce di menu.

Se si utilizza l'attività, il cassetto di navigazione non verrà visualizzato a meno che non si attivi BaseActivity che estende Navigation Drawer e lo utilizza ovunque. In questo caso è necessario modificare l'animazione di transizione attiva anche quando verrà visualizzata una nuova attività dopo aver fatto clic sul menu che potrebbe sembrare strano.

0

Fare clic con il tasto destro del mouse sul progetto -> Nuovo -> Frammento.

Modificare di conseguenza l'interruttore.

0

@Passiondroid'sanswer sull'utilizzo di Frammenti solo se si desidera che il cassetto di Navigazione su tutte le attività sia a posto.

di iniziare un attività sul click della voce di menu, in una delle mie applicazioni, seguo questo,

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     switch(id) 
     { 

      case R.id.nav_profile: 
      selection = 1; 
       intent = new Intent("android.intent.action.WEB"); 
       intent.putExtra("selection",selection); 
       startActivity(intent); 
       break; 
      case R.id.nav_books: 
       intent = new Intent("android.intent.action.WEBD"); 
       selection = 2; 
       intent.putExtra("selection",selection); 
       startActivity(intent); 
       break; 
      case R.id.fav_quotes: 
       intent = new Intent ("android.intent.action.SHOWFAVTES"); 
       selection = 3; 
       intent.putExtra("selection",selection); 
       startActivity(intent); 
       break; 
      default: 
       break; 
     } 

Per modificare e configurare la voce di menu, è possibile trovare il "activity_main_drawer.xml" sotto RES-> Menu.

E al clic di ciascuna voce di menu, è possibile avviare un'attività secondo i propri desideri. Hai dichiarato le attività nel tuo file AndroidManifest.xml prima di usarlo.

Problemi correlati