Navigation drawer just following one instruction - android

I am using a navigation drawer and want it to do different activities for different cases. I am using the switch method to implement the activities. I have implemented 3 switch cases but however, it keeps doing the case 3 instead of case 2. Here is my code that i am using:
PrimaryDrawerItem item1 = new PrimaryDrawerItem().withIdentifier(1).withName("Discover");
PrimaryDrawerItem item2 = new PrimaryDrawerItem().withIdentifier(2).withName("Rank Table");
PrimaryDrawerItem item3 = new PrimaryDrawerItem().withIdentifier(3).withName("Log out");
//create the drawer and remember the `Drawer` result object
Drawer result = new DrawerBuilder()
.withActivity(this)
.withAccountHeader(headerResult)
.withToolbar(toolbar)
.addDrawerItems(
item1, item2, item3
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
#Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
switch(position){
case 1: break;
case 2: startActivity(new Intent(HomePage.this, RankT.class));
case 3: firebaseAuth.signOut();
finish();
startActivity(new Intent(HomePage.this, MainActivity.class));
}
return true;
})
.build();

You forgot to add break; at the end of each switch case.
switch(position){
case 1: break;
case 2: startActivity(new Intent(HomePage.this, RankT.class));
break;
case 3: firebaseAuth.signOut();
finish();
startActivity(new Intent(HomePage.this, MainActivity.class));
break;
}
Hope this will help!!

Related

Divider item does not allow my code to run

Within my navigation drawer, I am trying to execute a code to start a new activity so it moves from one activity to another. However, When I use a DividerDrawerItem() it does not execute the last case statement (4). I've tried it without the DividerDrawerItem() and it works but when I add it in, it does not.
PrimaryDrawerItem item1 = new PrimaryDrawerItem().withIdentifier(1).withName("Home Page");
PrimaryDrawerItem item2 = new PrimaryDrawerItem().withIdentifier(2).withName("Rank Table");
PrimaryDrawerItem item3 = new PrimaryDrawerItem().withIdentifier(3).withName("Report");
PrimaryDrawerItem item4 = new PrimaryDrawerItem().withIdentifier(4).withName("Log out");
//create the drawer and remember the `Drawer` result object
Drawer result = new DrawerBuilder()
.withActivity(this)
.withAccountHeader(headerResult)
.withToolbar(toolbar)
.addDrawerItems(
item1, item2,item3,
new DividerDrawerItem(),
item4
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
#Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
// do something with the clicked item :D
switch(position){
case 1: startActivity(new Intent(HomePage.this, HomePage.class));
break;
case 2: startActivity(new Intent(HomePage.this, RankT.class));
break;
case 3: startActivity(new Intent(HomePage.this,Report.class));
break;
case 4: firebaseAuth.signOut();
finish();
startActivity(new Intent(HomePage.this,MainActivity.class));
}
return true;
}
I think your code is using position where it should use identifier.
Change switch(position) to switch((int) drawerItem.getIdentifier())

How to prevent for recreate activity when navigation drawer menu click

In my application i don't want to recreate activity on navigation drawer menu click when i am on same activity.
user on map activity after navigation drawer item click map reloading. i don't want to reload map or refresh activity.
private void displayView(int position)
{
switch (position)
{
case 0:
break;
case 1:
Intent intent1 = new Intent(this, Activity1.class);
startActivity(intent1);
//finish();
break;
case 2:
Intent intent2 = new Intent(this, Activity2.class);
startActivity(intent2);
finish();
break;
case 3:
Intent intent4 = new Intent(this, Activity3.class);
startActivity(intent4);
finish();
break;
default:
break;
}
You can add the following to your function
private int current=-1;
private void displayView(int position)
{
switch (position)
{
case 0:
current =0;
break;
case 1:
if(current!=1){
current =1;
Intent intent1 = new Intent(this, Activity1.class);
startActivity(intent1);
//finish();
}
break;
case 2:
if(current!=2){
current=2;
Intent intent2 = new Intent(this, Activity2.class);
startActivity(intent2);
finish();
}
break;
case 3:
if(current!=3){
current=3
Intent intent4 = new Intent(this, Activity3.class);
startActivity(intent4);
finish();
}
break;
default:
break;
}

Adding Navigation Drawer Activity template to existing project

I currently have an existing project in which I would like to implement an navigation drawer activity. Currently, if I add a new navigation drawer activity, it generates the following layout:
However, instead of the layout above I would like my navigation drawer to look exactly like the default template one which looks like this (consisting of a nav header, etc):
How can I go about achieving this? I'm new to Android development.
EDIT: I just needed to change my app theme to achieve what I wanted
Create a new Drawer Activity :
File->new->activity->Navigation Drawer Activity
private void setupNavigationDrawer() {
//if you want to update the items at a later time it is recommended to keep it in a variable
PrimaryDrawerItem item1 = new PrimaryDrawerItem().withIdentifier(0).withName(R.string.drawer_item_home).withIcon(getResources().getDrawable(R.drawable.ic_home_white_24dp));
PrimaryDrawerItem item2 = new PrimaryDrawerItem().withIdentifier(1).withName(R.string.drawer_item_login).withIcon(getResources().getDrawable(R.drawable.ic_account_circle_white_24dp));
PrimaryDrawerItem item3 = new PrimaryDrawerItem().withIdentifier(2).withName(R.string.drawer_item_movies).withIcon(getResources().getDrawable(R.drawable.ic_movie_white_24dp));
PrimaryDrawerItem item4 = new PrimaryDrawerItem().withIdentifier(3).withName(R.string.drawer_item_trailers).withIcon(getResources().getDrawable(R.drawable.ic_videocam_white_24dp));
PrimaryDrawerItem item5 = new PrimaryDrawerItem().withIdentifier(4).withName(R.string.drawer_item_theatres).withIcon(getResources().getDrawable(R.drawable.ic_theaters_white_24dp));
PrimaryDrawerItem item6 = new PrimaryDrawerItem().withIdentifier(5).withName(R.string.drawer_item_location).withIcon(getResources().getDrawable(R.drawable.ic_location_on_white_24dp));
SecondaryDrawerItem item7 = (SecondaryDrawerItem) new SecondaryDrawerItem().withIdentifier(6).withName(R.string.drawer_item_about_us).withIcon(FontAwesome.Icon.faw_info_circle);
SecondaryDrawerItem item8 = (SecondaryDrawerItem) new SecondaryDrawerItem().withIdentifier(7).withName(R.string.drawer_item_contact_us).withIcon(FontAwesome.Icon.faw_whatsapp);
SecondaryDrawerItem item9 = (SecondaryDrawerItem) new SecondaryDrawerItem().withIdentifier(8).withName(R.string.drawer_item_feedback).withIcon(FontAwesome.Icon.faw_commenting);
SecondaryDrawerItem item10 = (SecondaryDrawerItem) new SecondaryDrawerItem().withIdentifier(9).withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_wrench);
// Create the AccountHeader
AccountHeader headerResult = new AccountHeaderBuilder()
.withActivity(this)
.withHeaderBackground(R.color.colorMaterialDark)
.addProfiles(
new ProfileDrawerItem().withName(getResources().getString(R.string.app_name)).withEmail(getResources().getString(R.string.email_id)).withIcon(getResources().getDrawable(R.drawable.profile))
)
.withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
#Override
public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) {
//Any activity or Intent
}
})
.build();
//Create the drawer and remember the `Drawer` result object
Drawer result = new DrawerBuilder()
.withActivity(this)
.withAccountHeader(headerResult)
.withToolbar(toolbar)
.addDrawerItems(
item1, item2, item3, item4, item5, item6,
new SectionDrawerItem().withName("Extras"),
item7, item8, item9, item10
)
//Set onClick options for drawer item click
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
#Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
// do something with the clicked item :D
switch (position) {
//Home
case 1: {
break;
}
//Login
case 2: {
//Login Activity
break;
}
case 3: {
//Third activity
break;
}
case 4: {
break;
}
case 5: {
break;
}
//Location
case 6: {
break;
}
//About us
case 8: {
break;
}
//Contact Us
case 9: {
break;
}
//Feedback
case 10: {
break;
}
//Settings
case 11:{
break;
}
}
return true;
}
})
.build();
result.addStickyFooterItem(new PrimaryDrawerItem().withName("Visit us again")); //Adding footer to nav drawer
}
You will have to add the following lines to build.gradle file in android studio
compile('com.mikepenz:materialdrawer:5.3.3#aar') {
transitive = true
}
compile 'com.mikepenz:fontawesome-typeface:4.6.0.2#aar'

Wrongly differentiating the childs' actions in an Expandable list view

I have a simple Expandable List View in a Fragment with only two levels of lists: parent and child.
I would like to deploy methods when clicking on the child, so that each child opens up a different activities.
Now, I am using a setOnChildClickListener on my "expListView" this way
expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
#Override
public boolean onChildClick(ExpandableListView parent, View view,
int groupPosition, int childPosition, long id) {
switch (groupPosition) {
case 0:
switch (childPosition) {
case 0:
Intent Open00 = new Intent(getActivity(), First.class);
getActivity().startActivityForResult(Open00, 0);
getActivity().overridePendingTransition(R.anim.bounce, R.anim.bounce);
break;
case 1:
Intent Open01 = new Intent(getActivity(), Second.class);
getActivity().startActivityForResult(Open01, 0);
getActivity().overridePendingTransition(R.anim.bounce, R.anim.bounce);
break;
}
case 1:
switch (childPosition) {
case 0:
Intent Open1 = new Intent(getActivity(), Popup1.class);
getActivity().startActivityForResult(Open1, 1);
getActivity().overridePendingTransition(R.anim.bounce, R.anim.bounce);
break;
case 1:
Intent Open2 = new Intent(getActivity(), Popup2.class);
getActivity().startActivityForResult(Open2, 1);
getActivity().overridePendingTransition(R.anim.bounce, R.anim.bounce);
break;
}
case 2:
switch (childPosition) {
case 2:
break;
case 3:
break;
}
}
return false;
}
});
What happens now, is that if I click on the first child (number 0) of the first group (number 0 again), it opens two activities, i.e. the number 0 from the group 0 and the 0th from the group 1.
I am wondering why, given that I have also used the switches to fix this issue.
Thanks in advance
I found it, jeez!
expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
#Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
switch (groupPosition) {
case 0:
switch (childPosition) {
case 0:
Intent Open00 = new Intent(getActivity(), First.class);
getActivity().startActivityForResult(Open00, 0);
getActivity().overridePendingTransition(R.anim.bounce, R.anim.bounce);
break;
case 1:
Intent Open01 = new Intent(getActivity(), Second.class);
getActivity().startActivityForResult(Open01, 0);
getActivity().overridePendingTransition(R.anim.bounce, R.anim.bounce);
break;
}
**break**;
case 1:
switch (childPosition) {
case 0:
Intent Open1 = new Intent(getActivity(), Popup1.class);
getActivity().startActivityForResult(Open1, 1);
getActivity().overridePendingTransition(R.anim.bounce, R.anim.bounce);
break;
case 1:
Intent Open2 = new Intent(getActivity(), Popup2.class);
getActivity().startActivityForResult(Open2, 1);
getActivity().overridePendingTransition(R.anim.bounce, R.anim.bounce);
break;
}
break;
case 2:
switch (childPosition) {
case 2:
break;
case 3:
break;
}
**break**;
case 3:
switch (childPosition) {
case 0:
break;
case 1:
break;
}
**break**;
}
return false;
}
});
I forgot to enter the break at the end of the groupcase!

Android action bar navigation

I've got spinner navigation on my action bar and have a navigation listener for this.
When the activity is created the listener (below) picks up on the default spinner item which means case 0 is run on creation, opening another activity.
How do I stop it registering a navigation change when the activity is created?
ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
switch(itemPosition) {
case 0:
Intent i = new Intent(Main.this, Example.class);
startActivity(i);
break;
case 1:
Intent i2 = new Intent(Main.this, Example.class);
startActivity(i2);
break;
case 2:
Intent i3 = new Intent(Main.this, Example.class);
startActivity(i3);
break;
case 3:
Intent i4 = new Intent(Main.this, Example.class);
startActivity(i4);
break;
}
return false;
}
};
Update:
Think I solved it with this, I declared a boolean flag, changed it to false oncreate.
ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
switch(itemPosition) {
case 0:
if(flag == true) {
if(Main.class == Main.class) {
} else {
Intent i = new Intent(Main.this, Main.class);
startActivity(i);
}
}
if(flag == false) {
flag = true;
}
break;
case 1:
Intent i2 = new Intent(Main.this, Example.class);
startActivity(i2);
break;
case 2:
Intent i3 = new Intent(Main.this, Example.class);
startActivity(i3);
break;
case 3:
Intent i4 = new Intent(Main.this, Example.class);
startActivity(i4);
break;
}
return false;
}
};
There may be a simpler way but you could put a boolean flag in onCreate() to false and check for that in your listener then set it to true after the first time when it sets up so it won't run the Intent code when you first run it. Depending on what you need, you may want to put it in onResume() so it doesn't run if you back into this Activity

Categories

Resources