Starting a new action in a navigation item

I know this is a frequently asked question, but after reading many questions and stack overflow solutions, I am confused. I am confused about Fragments and what it takes to start activity when I click an item in the navigation box.

I checked these posts but only got confused Q1 , Q2

Can someone explain what is required to start the main activity from this element of the navigation box? Do I need the onClick method that is specified in the code? Also how does this relate to intention?

Here is my 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); } 

And here is the second action, Playboard.java, which simply loads the background image:

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

The whole entrance is very grateful thanks!

+8
java android android-fragments navigation
source share
2 answers

For each case statement, you just need to specify which Activity you want to run with Intent .

Say, for example, that you want to launch Playboard activity when you select navigation_item_1 .

You would add this code to this particular case .

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

One word of warning: if you have an animation in the box, starting activity from the main thread will directly lead to the fact that the animation ends prematurely and looks strange. To work around this problem, you can do the following (the code uses retrolambda for prettiness, but this is optional):

 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
source share

All Articles