web-dev-qa-db-fra.com

Commencer une nouvelle activité sur un élément du tiroir de navigation, cliquez sur

Je sais que cette question est fréquemment posée, mais je suis confus après avoir lu les nombreuses questions et solutions relatives au débordement de pile. Je suis confus en ce qui concerne Fragments et ce qui est requis pour démarrer une activité en cliquant sur un élément du tiroir de navigation. 

J'ai vérifié ces publications, mais je suis seulement confus Q1 , Q2

Quelqu'un pourrait-il expliquer ce qui est nécessaire pour démarrer une activité de base à partir de cet élément du tiroir de navigation? Ai-je besoin d'une méthode onClick implémentée là où cela est spécifié dans le code? Aussi, comment cela se rapporte-t-il à l'intention?

Voici mon 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);
}

Et voici la deuxième activité, Playboard.Java, qui charge simplement une image d’arrière-plan:

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);
    }
}

Toutes les contributions grandement appréciées merci!

12
choloboy

Pour chaque instruction de cas, il vous suffit de spécifier la Activity à démarrer via une Intent.

Disons par exemple que vous souhaitez démarrer l'activité Playboard lorsque navigation_item_1 est sélectionné.

Vous ajouteriez ce code à cette case particulière.

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

Un mot d'avertissement: si vous avez des animations dans la boîte à dessin, le fait de démarrer une activité directement à partir du fil principal entraîne la fin prématurée de l'animation et son aspect bizarre. Pour résoudre ce problème, procédez comme suit (le code utilise retrolambda pour la beauté, mais ce n'est pas nécessaire):

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();
0
xtro