Android Navigation Drawer Click Event Issue
Solution 1:
When you call NavigationUI.setupWithNavController(navigationView, navController)
, you're saying that you want NavController
to handle click events from your NavigationView, navigating to the related screen as per the NavigationUI documentation. This, by necessity, calls setNavigationItemSelectedListener()
internally.
By calling setNavigationItemSelectedListener
afterwards, you remove the original listener, which is why your other items don't do anything anymore. You can trigger the default behavior by calling NavigationUI.onNavDestinationSelected()
@OverridepublicbooleanonNavigationItemSelected(@NonNull MenuItem menuItem) {
intid= menuItem.getItemId();
if (id == R.id.callUs) {
Intentintent=newIntent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + "XXXxxxXXX"));
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, newString[]{Manifest.permission.CALL_PHONE},REQUEST_PHONE_CALL);
}
else
{
startActivity(intent);
}
}
else
{
// Make your navController object final above// or call Navigation.findNavController() again here
NavigationUI.onNavDestinationSelected(menuItem, navController);
}
drawer.closeDrawer(GravityCompat.START);
returntrue;
}
Solution 2:
I tried to make a fragment and made a drawer here is my code:
import android.support.v4.app.FragmentManager;
import android.support.v4.app.Fragment;
import android.content.res.Configuration;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
import android.support.design.widget.NavigationView;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity implements View.OnClickListener, NavigationView.OnNavigationItemSelectedListener{
private Toolbar mToolBar;
private NavigationView mDrawer;
private ActionBarDrawerToggle mdrawerToggle;
private DrawerLayout mDrawerLayout;
private RelativeLayout digitalFrontier;
private RelativeLayout forwardThinkers;
private RelativeLayout preferedActions;
private LinearLayout innerParent;
public String viewVar;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
digitalFrontier.setOnClickListener(this);
forwardThinkers.setOnClickListener(this);
preferedActions.setOnClickListener(this);
}
@Override public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
returntrue;
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
// 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.intid = item.getItemId();
//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {
returntrue;
}
returnsuper.onOptionsItemSelected(item);
}
@Override public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mdrawerToggle.onConfigurationChanged(newConfig);
}
private void initViews(){
mToolBar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(mToolBar);
mDrawer = (NavigationView) findViewById(R.id.main_drawer);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_parent);
mdrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
mToolBar,
R.string.drawer_open,
R.string.drawer_close);
mDrawerLayout.setDrawerListener(mdrawerToggle);
// indicator based on whether the drawerlayout isinopenor closed
mdrawerToggle.syncState();
digitalFrontier = (RelativeLayout) findViewById(R.id.digital_frontier);
forwardThinkers = (RelativeLayout) findViewById(R.id.forward_thinkers);
preferedActions = (RelativeLayout) findViewById(R.id.prefered_actions);
innerParent = (LinearLayout) findViewById(R.id.inner_parent);
mDrawer.setNavigationItemSelectedListener(this);
}
@Override public void onClick(View v) {
if(v.getId() == R.id.digital_frontier || v.getId() == R.id.forward_thinkers ||
v.getId() == R.id.prefered_actions ){
detailActivity(v);
}
}
private void detailActivity(View view){
switch (view.getId()){
case R.id.digital_frontier:
viewVar = "digital frontier";
break;
case R.id.forward_thinkers:
viewVar = "forward thinkers";
break;
case R.id.prefered_actions:
viewVar = "prefered actions";
break;
}
Snackbar.make(mDrawerLayout, viewVar , Snackbar.LENGTH_LONG).show();
}
@Override public boolean onNavigationItemSelected(MenuItem menuItem) {
selectDrawerItem(menuItem);
returnfalse;
}
public void selectDrawerItem(MenuItem menuItem) {
// Create a new fragment and specify the planet to show based on// positionFragmentfragment=null;
ClassfragmentClass=null;
switch(menuItem.getItemId()) {
case R.id.agency_menu_item:
fragmentClass = FragmentAgency.class;
break;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// Insert the fragment by replacing any existing fragmentFragmentManagerfragmentManager=this.getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.fragment_content,
fragment).commit();
// Highlight the selected item, update the title, and close the drawer
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
//mDrawer.closeDrawers();
}
Post a Comment for "Android Navigation Drawer Click Event Issue"