百度地图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传入收藏点。

文章到此为止就实现了全部功能,如果对你有帮助请点赞。有疑问请留言,。。

Demo地址:
http://download.csdn.net/detail/u012552275/9694853


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小清微博自2009年到2011年,百度收藏夹经历了无数次修改更新,终于到2.9时,整个系统臃肿不堪,想再做进一步优化时,感到困难重重。主要原因是2.9的程序代码繁琐,又添加了很多平时不用到的功能,如在线客服等。 曾经尝试想在2.9版本的基础上,进行3.0的改造,半年后发现程序越改越乱,不说新手站长,连我自己有些地方都不记得是什么作用的了。 停顿一段时间后,决定重新开发百度收藏夹,并以微博为主,也多得之前的站长朋友建议。 3.0开始,百度收藏夹正式更名为小清微博,因为原名带有百度二字,申请接口什么的都不方便。而且不单单是改名这么简单,整个程序,从数据库到程序文件,都是重新开发的。 从百度收藏夹2.9程序上可以得到经验,当达到一万多条微博时,2.9的缓存(服务器缓存)就相当大,运行起来会把整台服务器拖得很慢,甚至卡死。当然,微博数少时还可以承受。 3.0缓存技术利用静态化html模板 xml 服务器缓存三项缓存技术,经测试,承受10万条微博时依然快速如飞,这就是3.0最大的亮之一。 3.0对搜索引擎优化还做了部分调整,具体就不一一列出了。 最后,希望各站长使用愉快!小清微博开发讨论QQ群:44757501(只限使用本程序的站长加入)  小清微博(原百度收藏夹)v3.1 集成多用户微博、网址收藏功能的开源程序,程序全部由小清开发,无加密无版权,可以自由使用。 开发者享有源代码的所有权,使用本程序运行过程中产生的相关数据,请自行做好备份,如有损失与程序作者无关。 当您开始使用本程序,表示您已接受上面的内容。 关于新版本: 1、本程序只适合3.0升级到3.1,2.9及之前的版本,请先下载3.0(带有升级程序),数据库升级为3.0之后,再升级到3.1. 2、3.1数据库只增加了表[S_set],用于记录系统设置,可直接复制新版本里的表[S_set]到你的旧数据库里。 3、运行前,请先修改Main/inc/config.asp里面的数据库连接地址,否则会出错。 4、增加了管理后台,地址/admin/,帐号和密码都是admin 5、修改了缓存机制、修正前台发现的一些小错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值