百度地图4.1_1开发教程(6)点收藏(2)

来源:互联网 发布:篮球鞋 知乎 编辑:程序博客网 时间:2024/04/29 01:37
实现对收藏点的删除,跳转地图上对应收藏点的操作新建一个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 0
原创粉丝点击