带谷歌地图片段的导航抽屉菜单

时间:2014-04-17 10:15:18

标签: android google-maps navigation-drawer

我正在将导航抽屉菜单与Google Map fragement集成。我有一个mapactivity它显示了从我开始的方向路径& screen1中给出的目标值。我的mapactivity正在显示方向,但在切换到导航菜单中的另一个项目时,我的应用程序没有显示下一个片段。请给我关于地图My MapActivity文件的建议,如下所示

    public class MapActivity extends ActionBarActivity {

    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    private SlidingUpPanelLayout slidingUpPanelLayout;
    // 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;

    private int historyPosition;
    SharedPreferences sharedpreferences;

    //Map Items
    LocationManager locManager;
    Drawable drawable;
    Document document;
    GMapV2GetRouteDirection v2GetRouteDirection;
    MarkerOptions markerOptions;
    Location location ;
    private SupportMapFragment fragment;


        //Map Items
        List<Overlay> mapOverlays;

        // Google Map
        private GoogleMap mGoogleMap;
    String value;

    public static  LatLng SOURCE = new LatLng(0,0);
    public static LatLng DESTINATION= new LatLng(0,0);
      double longitude;
      double latitude;





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

         value = getIntent().getStringExtra("KEY");
        setContentView(R.layout.activity_map);

        //Textview intialization
        distancetextView=(TextView)findViewById(R.id.name11);       
        currentSpeedTextView=(TextView)findViewById(R.id.textView2);    
        estimatedDistance=(TextView)findViewById(R.id.textView1);
        estimatedTime=(TextView)findViewById(R.id.textView3);
        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);
        slidingUpPanelLayout=(SlidingUpPanelLayout) findViewById(R.id.sliding_layout);



        navDrawerItems = new ArrayList<NavDrawerItem>();
        // adding nav drawer items to array
        // Home
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
        // Find People
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
        // Photos
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
        // Communities, Will add a counter here
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "22"));
        // Pages
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
        // What's hot, We  will add a counter here
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));

        // 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
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                getSupportActionBar().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
                ) {
                    @Override
                    public void onDrawerClosed(View view) {
                        getSupportActionBar().setTitle(mTitle);
                        // calling onPrepareOptionsMenu() to show action bar icons
                        supportInvalidateOptionsMenu();
                    }

                    @Override
                    public void onDrawerOpened(View drawerView) {
                        getSupportActionBar().setTitle(mDrawerTitle);
                        // calling onPrepareOptionsMenu() to hide action bar icons
                        supportInvalidateOptionsMenu();
                    }
                };
                mDrawerLayout.setDrawerListener(mDrawerToggle);


          //Geo Coder 
          Geocoder coder = new Geocoder(this);
            try {
                ArrayList<Address> adresses = (ArrayList<Address>) coder.getFromLocationName(value, 50);
                for(Address add : adresses){
                    if (adresses.size()>0) {//Controls to ensure it is right address such as country etc.
                         longitude = add.getLongitude();
                         latitude = add.getLatitude();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            DESTINATION=new LatLng(latitude,longitude);

            // check if GPS enabled
            GPSTracker gpsTracker = new GPSTracker(this);
            if (gpsTracker.canGetLocation())
            {
                double Curr_Latitude = gpsTracker.latitude;
                double Curr_Longitude =gpsTracker.longitude;
                SOURCE=new LatLng(Curr_Latitude,Curr_Longitude);
            }
            v2GetRouteDirection = new GMapV2GetRouteDirection();
              SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
                mGoogleMap = supportMapFragment.getMap();

                // Enabling MyLocation in Google Map
                mGoogleMap.setMyLocationEnabled(true);
                mGoogleMap.getUiSettings().setZoomControlsEnabled(true);
                mGoogleMap.getUiSettings().setCompassEnabled(true);
                mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true);
                mGoogleMap.getUiSettings().setAllGesturesEnabled(true);
                mGoogleMap.setTrafficEnabled(true);
                mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(12));
                markerOptions = new MarkerOptions();
                GetRouteTask getRoute = new GetRouteTask();
                getRoute.execute();

         try {
                // Loading map
                initilizeMap();

            } catch (Exception e) {
                e.printStackTrace();
            }






        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.drawer_layout, new PlaceholderFragment()).commit();
        }
    }


      }
    */
    @Override
    protected void onResume() {
        super.onResume();
        initilizeMap();
    }




    /**
    *
    * @author VIJAYAKUMAR M
    * This class Get Route on the map
    *
    */
   private class GetRouteTask extends AsyncTask<String, Void, String> {

         private ProgressDialog Dialog;
         String response = "";
         @Override
         protected void onPreExecute() {
               Dialog = new ProgressDialog(MapActivity.this);
               Dialog.setMessage("Loading route...");
               Dialog.show();
         }

         @Override
         protected String doInBackground(String... urls) {
               //Get All Route values
                    document = v2GetRouteDirection.getDocument(SOURCE, DESTINATION, GMapV2GetRouteDirection.MODE_DRIVING);
                     response = "Success";
               return response;

         }

         @Override
         protected void onPostExecute(String result) {
               mGoogleMap.clear();
               if(response.equalsIgnoreCase("Success")){
               ArrayList<LatLng> directionPoint = v2GetRouteDirection.getDirection(document);
               PolylineOptions rectLine = new PolylineOptions().width(5).color(
                           Color.BLUE);

               for (int i = 0; i < directionPoint.size(); i++) {
                     rectLine.add(directionPoint.get(i));
               }
               // Adding route on the map
               mGoogleMap.addPolyline(rectLine);
               markerOptions.position(DESTINATION);
               markerOptions.draggable(true);
               mGoogleMap.addMarker(markerOptions);
               mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SOURCE,
                      7));

               String text=v2GetRouteDirection.getTotalDistance(document);
               distancetextView.setText(text);
               MapActivity.estimatedDistance.setText("DISTANCE TRAVELLED "+"0 KM");
               String text1=v2GetRouteDirection.getTotalDuration(document);
               estimatedTime.setText("ESTIMATED TIME "+text1);

               }

               Dialog.dismiss();
         }
   }


  @Override
  protected void onStop() {
        super.onStop();
        finish();
  }

  /**
     * 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
            System.out.println("--ON SLIDE CLICKED----");
            sharedpreferences = getSharedPreferences("MyPREFERENCES", Context.MODE_PRIVATE);
            historyPosition=sharedpreferences.getInt("historyposition", 0);

             Editor editor = sharedpreferences.edit();
             editor.putInt("historyposition", position);
               editor.commit(); 

             System.out.println("----The Position at which the pointer Picked--"+position);
            System.out.println("----The Position at which the Prev pointer Picked--"+historyPosition);
            if(historyPosition!=position){
                displayView(position);
            }
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.map, menu);
        return true;
    }

    @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.
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action bar actions click
                switch (item.getItemId()) {
                case R.id.action_settings:
                    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 HomeFragment(); 
            break;
        case 1:
            fragment = new FindPeopleFragment();
            break;
        case 2:
            fragment = new PhotosFragment();
            break;
        case 3:
            fragment = new CommunityFragment();
            break;
        case 4:
            fragment = new PagesFragment();
            break;
        case 5:
            fragment = new WhatsHotFragment();
            break;

        default:
            break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            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;
        getSupportActionBar().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);
    }




    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_map, container,
                    false);
            return rootView;
        }
    }

}

我的map_layout文件

<android.support.v4.widget.DrawerLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">



    <!-- Framelayout to display Fragments -->
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


          <com.vysystems.travelgo.slidinguppanel.SlidingUpPanelLayout
        android:id="@+id/sliding_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="bottom">
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="match_parent">
                         <fragment 
      android:id="@+id/map"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:name="com.google.android.gms.maps.SupportMapFragment"
    />  
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#eeeeee"
            android:orientation="vertical"
            android:clickable="true"
            android:focusable="false">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="68dp"
                android:orientation="horizontal">


                   <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="match_parent"
         android:layout_weight="1"
         android:textSize="14sp"
        android:gravity="center_vertical"
        android:text="TOTAL DISTANCE "
         android:paddingLeft="10dp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

                   <TextView
        android:id="@+id/name11"
        android:layout_width="0dp"
        android:layout_height="match_parent"
         android:layout_weight="1"
         android:textSize="14sp"
        android:gravity="center_vertical"
        android:paddingLeft="10dp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

            </LinearLayout>
           <RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

 <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="24dp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="24dp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="23dp"
        android:textAppearance="?android:attr/textAppearanceLarge" />




</RelativeLayout>

        </LinearLayout>
    </com.vysystems.travelgo.slidinguppanel.SlidingUpPanelLayout>

    <!-- Listview to display slider menu -->
    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"        
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background"/>
</android.support.v4.widget.DrawerLayout>

1 个答案:

答案 0 :(得分:-1)

标签应放在应用程序的顶部,位于操作栏下方 - 如Android设计指南中所述。

请花些时间查看标签here(以及其他指南)的这些指南,它们对于开发Android应用程序至关重要!