1. 程式人生 > >百度地圖4.1_1開發教程(6)點收藏(2)

百度地圖4.1_1開發教程(6)點收藏(2)

實現對收藏點的刪除,跳轉地圖上對應收藏點的操作

新建一個Activity,其佈局很簡單
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_favo"
    android:layout_width="match_parent"
    android:layout_height
="match_parent" tools:context="com.kowalski.FavoActivity">
<android.support.v7.widget.RecyclerView android:focusable="true" android:focusableInTouchMode="true" android:id="@+id/activity_favo_address_rv_list" android:layout_width="match_parent" android:layout_height
="match_parent" android:layout_above="@+id/activity_favo_address_tv_delAll" android:layout_marginBottom="10dp" android:layout_marginTop="10dp"/>
<TextView android:id="@id/activity_favo_address_tv_delAll" android:layout_width="wrap_content" android:layout_height
="wrap_content" android:layout_alignParentRight="true" android:drawableStart="@mipmap/ic_del_all" android:gravity="center" android:padding="10dp" android:layout_alignParentBottom="true" android:text="清空"/>
</RelativeLayout>
列表呈現所有收藏的點,清空將刪除所有收藏的點。
FavoriteManager.getInstance().init(); // 初始化收藏夾
在OnCreate中,初始化收藏夾,接下來初始化其他:
initWidget();
    /**
     * 初始化控制元件
     */
    private void initWidget()
    {
        rv_list = (RecyclerView)findViewById(R.id.activity_favo_address_rv_list);
        rv_list.setHasFixedSize(true);
        rv_list.setLayoutManager(new LinearLayoutManager(this));
        rv_list.setItemAnimator(new DefaultItemAnimator());// 設定item動畫
        tv_delAll = (TextView)findViewById(R.id.activity_favo_address_tv_delAll);
    }
接下來就要將資料來源放到介面卡裡:
    /**
     * 載入資料
     */
    private void loadData()
    {
        list = FavoriteManager.getInstance().getAllFavPois(); // 得到收藏點的物件
        mAdapter = new FavoriteAdapter(activity, list);
        rv_list.setAdapter(mAdapter);
    }
介面卡的程式碼比較簡單,用兩個介面實現了點選和刪除的操作,就是有關RecyclerView的用法,看不懂的請百度
package com.kowalski;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.baidu.mapapi.favorite.FavoritePoiInfo;

import java.util.List;

/**
 * 我的收藏介面卡
 * Created by kowal on 2016/11/23.
 */

public class FavoriteAdapter extends RecyclerView.Adapter<FavoriteAdapter.MyViewHolder>
{
    private List<FavoritePoiInfo> list;
    private Context context;
    private LayoutInflater mInflater;
    private FavoAdapterClick listener = null;


    public interface FavoAdapterClick
    {
        void onItemClick(View view, int position);
        void onDelClick(View view, String currentId);
    }

    public void setOnItemClickLitener(FavoAdapterClick mOnItemClickLitener )
    {
        this.listener = mOnItemClickLitener;
    }

    public void removeData(int position)
    {
        list.remove(position);
        notifyItemRemoved(position);
    }

    public FavoriteAdapter(Context context, List<FavoritePoiInfo> list )
    {
        mInflater = LayoutInflater.from(context);
        this.context = context;
        this.list = list;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        MyViewHolder holder = new MyViewHolder(mInflater.inflate(
                R.layout.item_favo_adapter, parent, false));
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position)
    {
        holder.tv_title.setText(list.get(position).getPoiName());//為控制元件繫結資料

        if (null != listener)
        {
            final int pos = holder.getLayoutPosition();

            holder.itemView.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    listener.onItemClick(holder.itemView, pos);
                }
            });
            holder.iv_del.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    listener.onDelClick(v, list.get(pos).getID());
                    removeData(pos);
                }
            });
        }
    }

    @Override
    public int getItemCount()
    {
        return list == null ? 0 : list.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder
    {

        TextView tv_title;
        ImageView iv_del;

        public MyViewHolder(final View itemView)
        {
            super(itemView);

            tv_title = (TextView) itemView.findViewById(R.id.item_favo_tv_title);
            iv_del = (ImageView) itemView.findViewById(R.id.item_favo_iv_del);
        }
    }

}

// item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:gravity="center_vertical"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/item_favo_tv_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:padding="10dp"
        android:textSize="18sp"/>

    <ImageView
        android:id="@+id/item_favo_iv_del"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:src="@mipmap/ic_del_all"/>
</LinearLayout>
接下來,在Activity中實現點選事件
    private void setAction()
    {
        // 介面卡點選事件
        mAdapter.setOnItemClickLitener(new FavoriteAdapter.FavoAdapterClick()
        {
            @Override
            public void onItemClick(View view, int position)
            {
                // 跳轉到地圖Activity並將收藏點的ID傳入
                startActivity(new Intent(activity, MainActivity.class)
                        .putExtra("locationInfo", list.get(position).getID()));
            }

            @Override // 刪除
            public void onDelClick(View view, String currentId)
            {
                deleteOneClick(currentId);
            }
        });
        // 清空全部
        tv_delAll.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                delFavo();
            }
        });
    }
刪除的方法如下:
    /**
     * 刪除一個指定點
     */
    private void deleteOneClick(String currentId)
    {
        if (FavoriteManager.getInstance().deleteFavPoi(currentId))
        {
            Toast.makeText(activity, "刪除點成功" , Toast.LENGTH_SHORT);
            mAdapter.notifyDataSetChanged();
        } else
        {
            Toast.makeText(activity, "刪除點失敗" , Toast.LENGTH_SHORT);
        }
    }

    /**
     * 刪除所有收藏的點
     */
    private void delFavo()
    {
        if (FavoriteManager.getInstance().clearAllFavPois())
        {
            Toast.makeText(activity, "全部刪除成功" , Toast.LENGTH_SHORT);
            list = FavoriteManager.getInstance().getAllFavPois();
            mAdapter = new FavoriteAdapter(activity, list);
            rv_list.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged(); // 重新整理資料
        } else
        {
            Toast.makeText(activity, "刪除失敗,請稍後再試" , Toast.LENGTH_SHORT);
        }
    }
將收藏點的ID傳入,然後呼叫API的deleteFavPoi方法,其返回值是一個boolean型別,做個簡單的判斷,然後更新介面卡,就完成了。

接下來,我們要實現
// 跳轉到地圖Activity並將收藏點的ID傳入
            startActivity(new Intent(activity, MainActivity.class)
                    .putExtra("locationInfo", list.get(position).getID()));
這段程式碼。

在清單檔案中為MainActiivty新增屬性:android:launchMode="singleTask"
確保它會執行onNewIntent方法。
我們在startActivity方法的時候,將收藏點的ID傳了過來,因此,在MainActivity中的OnNewIntent方法中,我們這樣做:
 @Override
    protected void onNewIntent(Intent intent)
    {
        super.onNewIntent(intent);
        mBaiduMap.clear();
        List<FavoritePoiInfo> list = FavoriteManager.getInstance().getAllFavPois();
        if (intent.getStringExtra("locationInfo") != null)
        {
            String id = intent.getStringExtra("locationInfo");

            for (int i = 0; i < list.size(); i++)
            {
                if (list.get(i).getID().equals(id) || id == list.get(i).getID() )
                {
                    Logger.w("接受到的id是" , list.get(i).getPt().toString() + "" );
                    MarkerOptions option = new MarkerOptions().icon(mFavoIcon).position(list.get(i).getPt());

                    mFavoAlMarker = ((Marker) mBaiduMap.addOverlay(option));
                    // 獲取經緯度
                    LatLng latLng = new LatLng(list.get(i).getPt().latitude, list.get(i).getPt().longitude);
                    // 設定地圖中心點以及縮放級別
                    MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngZoom(latLng, 15);
                    mBaiduMap.animateMapStatus(mapStatusUpdate);
                }
            }

        }
在方法中我們接收到ID,使用迴圈獲取ID對用的收藏點的物件,然後在地圖上將收藏點顯示出來。
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngZoom(latLng, 15);
                mBaiduMap.animateMapStatus(mapStatusUpdate);
                這段程式碼的意思是,將收藏點的經緯度作為中心,並移動到這個座標點。這樣,收藏點就完成了。如果需要額外的marker點選事件,可以使用MarkerOptions的extraInfo方法,將bundle傳入收藏點。

文章到此為止就實現了全部功能,如果對你有幫助請點贊。有疑問請留言,。。

請支援我,掃描左側二維碼打賞,謝謝。

相關推薦

地圖4.1_1開發教程7工具類

繼續上次截圖的工具類 本章包含的內容有, 1.移動指定的經緯度到中心點 2.將座標收藏到收藏夾 3.移動點的斜率、角度、距離(官方) 4.進行軌跡移動 /** * 百度地圖工具類 * Created by kowal on 2016/12/8.

地圖4.1_1開發教程6收藏2

實現對收藏點的刪除,跳轉地圖上對應收藏點的操作 新建一個Activity,其佈局很簡單 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=

地圖4.1_1開發教程6收藏1

在本章教程中,將一起學習長按地圖收藏該點,這本章中,將設計到的內容有 1.長按時間 2.生成marker 3.地理編碼搜尋(用地址檢索座標)、反地理編碼搜尋(用座標檢索地址) 4.收藏點 5.刪除點等操作 先上效果圖 長按地圖,生成地圖的點,地理編碼搜

地圖4.1_1開發教程3Marker

本章將講述如何利用Marker在地圖生成點,並實現點選Marker彈出該點對應的資訊。 1.點選點獲取座標 2.在我的專案裡,會將地圖上的一些飛機作為Marker,點選並彈出該飛機對應的詳情 3.點選地

地圖4.1_1開發教程9poi搜尋功能

繼上次 本章包含: 搜尋建議 城市POI搜尋,POI: Point of Interest,翻譯過來就是“興趣點”。我們在百度地圖看到的烤吧、網咖等都算是POI。百度地圖SDK提供了三種類型的POI檢索:周邊檢索、區域檢索和城市內檢索。由於我的專案只

地圖二次開發——建立Hello World2

準備頁面 根據HTML標準,每一份HTML文件都應該宣告正確的文件型別,我們建議您使用最新的符合HTML5規範的文件宣告: <!DOCTYPE html> 適應移動端頁面展示 下面我們新增一個meta標籤,以便使您的頁面更好的在移動平臺上展示。 <me

地圖的簡單開發之實現地圖全景,內景展示功能

今天,我就接著來淺談一下關於百度地圖的內景,外景的展示功能。今天具體要實現的功能就是輸入該地點的名稱然後就展示該地點的內景圖片,有內景就展示內景,沒有則顯示該地點的街景,該功能是參考百度地圖官方的API來實現。      實現街景展示的地點的搜尋,需要涉及到幾個

地圖的簡單開發之實現基本地圖的型別及覆蓋物的新增

今天,我們接著上一講,上一講我們把地圖上介面自定義了一番,加上了按鈕等一系列的控制元件,但是還沒有給這些加上具體的功能,今天這一講,主要是實現幾種地圖的切換,是否開啟實時交通,通過自定義的按鈕去控制地圖的縮放,以及在地圖上新增覆蓋物及相關顯示覆蓋物的資訊。   

地圖離線API開發純粹的離線 GT小俠

         公司現在做的一個專案本來用的是google離線地圖,但是發現谷歌的地圖資料很久沒更新資料了,中國的城市發展這麼快,好多地方地圖和現實都對不上了。發現百度地圖資料更新挺快的(呵呵,畢竟是國產的嗎),最後公司決定要把google地圖換成百度地圖。就把此重任交個

地圖二次開發Demo

sso http fill log 百度地圖 popu art .com b2c 單點標註:電子顯示對應位置的圖片,信息框 多點標註(批量點標註): 多點連線(基於多個點形成路徑): 若須要Demo源

TP5呼叫地圖介面進行開發

進入百度地圖開放平臺,建立應用:服務端,生成AK碼,複製。在extend目錄下建立一個Map.php,程式碼如下:<?php /** * 百度地圖相關業務封裝 */ class Map{ //根據地址獲取經緯度 public static funct

地圖js 畫執行軌跡之加黑色圖層

在百度地圖展示執行軌跡的時候,有時候想要加一個灰濛濛的圖層展示,像是以黑色主題為主,顯的高大上些,實現方式如下: 在js呼叫如下: this.layoutMap(mapInit); // mapI

地圖js 畫執行軌跡之執行軌跡標註文字

在執行軌跡中需要在起止點加上資訊提示,實現方法如下: //加資訊提示的文字方法 setInfoBox:function (tracksPart,marker) { // var point = new BMap.Point(tracksPart.

Python爬蟲--利用地圖API批量獲取城市所有的POI

作者:WenWu_Both 出處:http://blog.csdn.net/wenwu_both/article/ 版權:本文版權歸作者和CSDN部落格共有 轉載:歡迎轉載,但未經作者同意,必須保留此段宣告;必須在文章中給出原文連結;否則必究法律責任

js呼叫地圖介面繪製任意多邊形並獲取每個的經緯度等

來自:https://blog.csdn.net/u013239236/article/details/52213977 侵刪 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type"

android 地圖系列之新增覆蓋物和覆蓋物的選事件

之前講了百度地圖定位和地圖基本操作,這篇部落格講一下,怎麼去給地圖新增覆蓋物,並當點選覆蓋物的時候顯示詳細資訊。 要給地圖新增覆蓋物,首先需要覆蓋物的經緯度,如果還要實現點選事件,顯示詳細的資訊,還需要覆蓋物的描述資訊(如圖片,位置名稱等),所以先新建一個實體

Android定位&地圖&導航——基於地圖,實現自定義圖示繪製並選時彈出泡泡

public class MainActivity extends Activity { private EditText txtAddr; // 定位相關 LocationClient mLocClient; LocationData locData = nul

地圖路線規劃路線的起始圖示的選監聽

最近專案中用到百度地圖,其中一個功能是點選路徑規劃生成的路線的終點圖示彈出InfoWindow,顯示目的地資訊。 我是這樣解決的: 在DrivingRouteOverlay中, @Override public final List<OverlayOptions&g

Android 地圖 動態畫多邊形,並判斷一個是否在多邊形內部

由於專案的需求,需要動態的在地圖上畫出多邊形,並且需要判斷一個點是否在多邊形的範圍內,根據官方的demo,結合網上的查的資料,做出的效果如下圖所示: 思路就是: 1.點選地圖增加marker; 2.拿到marker,根據marker來

地圖介面繪製任意多邊形並獲取每個的經緯度

實現思路: 1:新增繪製工具的監聽事件 2:遍歷取出座標集合 copy程式碼直接執行測試即可 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Ty