2016-04-06 6 views
8

So che questa è una domanda frequente, ma dopo aver letto le molte domande e soluzioni sullo stack overflow sono confuso. Sono confuso riguardo a Fragments e cosa è necessario per avviare un'attività facendo clic su un elemento nel pannello di navigazione.Avvio di una nuova attività sull'elemento del riquadro di navigazione fare clic su

Ho controllato questi posti, ma solo un po 'confusa Q1, Q2

Qualcuno potrebbe spiegare che cosa è necessario per avviare un'attività di base da questa voce cassetto di navigazione? Ho bisogno di un metodo onClick implementato dove specificato nel codice? Inoltre, come si relaziona con l'Intento?

Ecco il mio MainActivity.java

import android.content.res.Configuration; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity { 

DrawerLayout drawerLayout; 
ActionBarDrawerToggle drawerToggle; 
NavigationView navigation; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    initInstances(); 
} 

private void initInstances() { 
    getSupportActionBar().setHomeButtonEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
    drawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.hello_world, R.string.hello_world); 
    drawerLayout.setDrawerListener(drawerToggle); 

    navigation = (NavigationView) findViewById(R.id.navigation_view); 
    navigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 
      int id = menuItem.getItemId(); 
      switch (id) { 
       case R.id.navigation_item_1: 
        //Do some thing here 
        // add navigation drawer item onclick method here 
        break; 
       case R.id.navigation_item_2: 
        //Do some thing here 
        // add navigation drawer item onclick method here 
        break; 
       case R.id.navigation_item_3: 
        //Do some thing here 
        // add navigation drawer item onclick method here 
        break; 
       case R.id.navigation_item_4: 
        //Do some thing here 
        // add navigation drawer item onclick method here 
        break; 
       case R.id.navigation_item_5: 
        //Do some thing here 
        // add navigation drawer item onclick method here 
        break; 
      } 
      return false; 
     } 
    }); 

} 

@Override 
public void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    drawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    drawerToggle.onConfigurationChanged(newConfig); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.navigation_view_items, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (drawerToggle.onOptionsItemSelected(item)) 
     return true; 

    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.string.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

E qui è la seconda attività, Playboard.java, che carica semplicemente un'immagine di sfondo:

import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class Playboard extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_playboard); 
    } 
} 

Tutti gli input molto apprezzato, grazie!

risposta

5

Per ogni dichiarazione di caso, è sufficiente specificare quale Activity si desidera avviare tramite Intent.

Ad esempio, si desidera avviare l'attività Playboard quando è selezionato navigation_item_1.

Aggiungere questo codice a quello specifico case.

case R.id.navigation_item_1: 
    Intent i = new Intent(MainActivity.this, Playboard.class); 
    startActivity(i); 
    break; 
+0

per l'uso scopo devo importare qualsiasi libreria in modo specifico? Ho provato questo proprio ora e ho un errore di intento e io – choloboy

+0

C'è una istruzione import richiesta nel file: 'import android.content.Intent;'. Tuttavia, Android Studio ed Eclipse sono in grado di aiutarti a risolvere le importazioni mancanti. –

+0

Ha funzionato come un fascino. Grazie mille. – choloboy

0

Una parola di avvertimento: se avete animazioni sul drawerbox, partendo un'attività dal thread principale direttamente causerà l'animazione per terminare prematuramente e guarda strano. Per ovviare a questo problema, è possibile effettuare le seguenti operazioni (il codice utilizza retrolambda per la bellezza, ma non è necessario):

Class<? extends Activity> activityClass = null; 
switch (menuItem.getItemId()) { 
    case R.id.navigation_item_1: 
    activityClass = MainActivity.class; 
    break; 
} 

final Class<?> finalActivityClass = activityClass; 
Executors.newSingleThreadExecutor().execute(() -> { 
    Intent intent = new Intent(getApplicationContext(), finalActivityClass); 
    startActivity(intent); 
}); 

menuItem.setChecked(true); 
mDrawerLayout.closeDrawers(); 
Problemi correlati