百度地图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
- 百度地图4.1_1开发教程(6)点收藏(2)
- 百度地图4.1_1开发教程(6)点收藏(1)
- 百度地图4.1_1开发教程(2)
- 百度地图4.1_1开发教程(1)
- 百度地图4.1_1开发教程(3)Marker
- 百度地图4.1_1开发教程(4)MarkerDrag
- 百度地图4.1_1开发教程(5)Overlay、Polyline
- 百度地图4.1_1开发教程(7)工具类
- 百度地图4.1_1开发教程(7)截图工具类
- 百度地图4.1_1开发教程(8)为marker加上备注
- 百度地图4.1_1开发教程(9)poi搜索功能
- 百度地图开发(2)
- 详解android studio百度地图开发教程(百度地图API使用教程)
- 百度地图3.2教程(2)公交查询
- 百度地图iOS SDK开发教程(珍藏版)
- Android 百度地图开发教程(一) 地图使用入门及地图表面覆盖物使用
- 百度地图新手教程6(转载自百度)
- 百度地图新手教程2(转载自百度)
- 将RGB图片和视差图D融合成四通道RGBD图片
- 世界嵌入式系统IC市场格局分析
- ListView学习(四)
- mooc第六周
- 缓存服务器
- 百度地图4.1_1开发教程(6)点收藏(2)
- 一分钟理解向后兼容
- 玲珑杯”ACM比赛 Round #5
- Makefile备忘录
- 创建和使用URL访问网络上的资源
- 静态代码块,构造代码块,构造函数之间的差别及先后执行顺序
- mac下重置mysql密码
- VS2012 未能打开解决方案的源代码数据库
- 反射,类加载与垃圾回收