问题描述:

I have Two Problem in my Application

  1. I have a Navigation drawer in my application where home is Fragment carrying Google Map.
  2. I want to show only 4 element in listmenu in navigation but I want to show navigation drawer icon and functionality in all the activities in the entire application.

Could any buddy please tell me answer of my two question.

In Map Section I am Using Following Code

MainActivity.Java

import android.app.Fragment;

import android.app.FragmentManager;

import android.app.SearchManager;

public class MainActivity extends Activity {

private DrawerLayout mDrawerLayout;

private ListView mDrawerList;

private ActionBarDrawerToggle mDrawerToggle;

// nav drawer title

private CharSequence mDrawerTitle;

// used to store app title

private CharSequence mTitle;

// slide menu items

private String[] navMenuTitles;

private TypedArray navMenuIcons;

private ArrayList<NavDrawerItem> navDrawerItems;

private NavDrawerListAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTitle = mDrawerTitle = getTitle();

// load slide menu items

navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

// nav drawer icons from resources

navMenuIcons = getResources().obtainTypedArray(R.array.nav_drawer_icons);

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

navDrawerItems = new ArrayList<NavDrawerItem>();

// adding nav drawer items to array

// Home

navDrawerItems.add(new NavDrawerItem(navMenuTitles[0],navMenuIcons.getResourceId(0, -1)));

// User List

navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));

// AR

navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));

// TC

navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));

//BPI

navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));

// BPP

navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));

//BPM

/*navDrawerItems.add(new NavDrawerItem("", navMenuIcons.getResourceId(6, -1)));

//BPT

navDrawerItems.add(new NavDrawerItem("", navMenuIcons.getResourceId(7, -1)));

//Logout

navDrawerItems.add(new NavDrawerItem("", navMenuIcons.getResourceId(8, -1)));*/

// Recycle the typed array

navMenuIcons.recycle();

mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

// setting the nav drawer list adapter

adapter = new NavDrawerListAdapter(getApplicationContext(),

navDrawerItems);

mDrawerList.setAdapter(adapter);

// enabling action bar app icon and behaving it as toggle button

getActionBar().setDisplayHomeAsUpEnabled(true);

getActionBar().setDisplayShowTitleEnabled(true);

getActionBar().setHomeButtonEnabled(true);

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,

R.drawable.ic_drawer, //nav menu toggle icon

R.string.app_name, // nav drawer open - description for accessibility

R.string.app_name // nav drawer close - description for accessibility

) {

public void onDrawerClosed(View view) {

getActionBar().setTitle(mTitle);

// calling onPrepareOptionsMenu() to show action bar icons

invalidateOptionsMenu();

}

public void onDrawerOpened(View drawerView) {

getActionBar().setTitle(mDrawerTitle);

// calling onPrepareOptionsMenu() to hide action bar icons

invalidateOptionsMenu();

}

};

mDrawerLayout.setDrawerListener(mDrawerToggle);

if (savedInstanceState == null) {

// on first time display view for first nav item

displayView(0);

}

}

/**

* Slide menu item click listener

* */

private class SlideMenuClickListener implements

ListView.OnItemClickListener {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

// display view for selected nav drawer item

displayView(position);

}

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

// Associate searchable configuration with the SearchView

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

return super.onCreateOptionsMenu(menu);

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// toggle nav drawer on selecting action bar app icon/title

if (mDrawerToggle.onOptionsItemSelected(item)) {

return true;

}

// Handle action bar actions click

switch (item.getItemId()) {

case R.id.action_settings:

return true;

case R.id.action_search:

// search action

return true;

default:

return super.onOptionsItemSelected(item);

}

}

/* *

* Called when invalidateOptionsMenu() is triggered

*/

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

// if nav drawer is opened, hide the action items

boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);

menu.findItem(R.id.action_settings).setVisible(!drawerOpen);

return super.onPrepareOptionsMenu(menu);

}

/**

* Diplaying fragment view for selected nav drawer list item

* */

private void displayView(int position) {

// update the main content by replacing fragments

Fragment fragment = null;

switch (position) {

case 0:

fragment = new MapViewFragment();

//fragment = new UserListFragment();

/*Intent i = new Intent(MainActivity.this, MapActivity.class);

startActivity(i);*/

break;

case 1:

fragment = new UserListFragment();

break;

case 2:

fragment = new ARFragment();

break;

case 3:

fragment = new CommunityFragment();

break;

case 4:

fragment = new PagesFragment();

break;

case 5:

AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);

// Setting Dialog Title

alertDialog.setTitle("Confirm Logout...");

// Setting Dialog Message

alertDialog.setMessage("Are you sure want to Logout ?");

/* // Setting Icon to Dialog

alertDialog.setIcon(R.drawable.delete);*/

// Setting Positive "Yes" Button

alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,int which) {

// Write your code here to invoke YES event

Toast.makeText(getApplicationContext(), "You clicked on YES", Toast.LENGTH_SHORT).show();

finish();

}

});

// Setting Negative "NO" Button

alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

// Write your code here to invoke NO event

Toast.makeText(getApplicationContext(), "You clicked on NO", Toast.LENGTH_SHORT).show();

dialog.cancel();

}

});

// Showing Alert Message

alertDialog.show();

// finish();

//

break;

default:

break;

}

if (fragment != null) {

FragmentManager fragmentManager = getFragmentManager();

fragmentManager.beginTransaction()

.replace(R.id.frame_container, fragment).commit();

// update selected item and title, then close the drawer

mDrawerList.setItemChecked(position, true);

mDrawerList.setSelection(position);

setTitle(navMenuTitles[position]);

mDrawerLayout.closeDrawer(mDrawerList);

} else {

// error in creating fragment

Log.e("MainActivity", "Error in creating fragment");

}

}

@Override

public void setTitle(CharSequence title) {

mTitle = title;

getActionBar().setTitle(mTitle);

}

/**

* When using the ActionBarDrawerToggle, you must call it during

* onPostCreate() and onConfigurationChanged()...

*/

@Override

protected void onPostCreate(Bundle savedInstanceState) {

super.onPostCreate(savedInstanceState);

// Sync the toggle state after onRestoreInstanceState has occurred.

mDrawerToggle.syncState();

}

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

// Pass any configuration change to the drawer toggls

mDrawerToggle.onConfigurationChanged(newConfig);

}

}

MapViewFragment.java

 import android.app.Fragment;

import android.app.FragmentManager;

public class MapViewFragment extends Fragment {

private SupportMapFragment fragment;

private GoogleMap map;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment_map, container, false);

}

@Override

public void onActivityCreated(Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

FragmentManager fm = getChildFragmentManager();

fragment = (SupportMapFragment) fm.findFragmentById(R.id.map);

if (fragment == null) {

fragment = SupportMapFragment.newInstance();

fm.beginTransaction().replace(R.id.map, fragment).commit();

}

/**

* *at this time google play services are not initialize so get map and add

* what ever you want to it in onResume() or onStart() **/

}

@Override

public void onResume() {

super.onResume();

if (map == null) {

map = fragment.getMap();

map.addMarker(new MarkerOptions().position(new LatLng(0, 0)));

}

}

}

mapfrgment.xml

<fragment

android:id="@+id/map"

android:layout_width="match_parent"

android:layout_height="match_parent"

class="com.google.android.gms.maps.SupportMapFragment"/>


I am not able to understand Where I am doing wrong please help me.

相关阅读:
Top