- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在寻找类似已完成的事情 right here在安卓系统中。我需要做的是将标记分组到不同的组中,并为每个组设置复选框。
当我勾选和取消勾选复选框时,标记应该显示和隐藏。
这是我的 MapsActivity.java 文件。
public class MapsActivity extends FragmentActivity {
//Restaurants
private final LatLng LOCATION_DINEMORE = new LatLng(6.9270786,79.861243);
private final LatLng LOCATION_BARISTA = new LatLng(6.0334009,80.218384);
//Hotels
private final LatLng LOCATION_AVENRA = new LatLng(7.211111,79.838610);
private final LatLng LOCATION_MOUNTBATTEN = new LatLng(7.296411,80.635012);
private GoogleMap mMap; // Might be null if Google Play services APK is not available.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
setUpMapIfNeeded();
// Give text to buttons
Button buttonloc1 = (Button)findViewById(R.id.btnLoc1);
buttonloc1.setText("Dinemore");
Button buttonloc2 = (Button)findViewById(R.id.btnLoc2);
buttonloc2.setText("Barista");
Button buttoncity = (Button)findViewById(R.id.btnCity);
buttoncity.setText("My Location");
Button buttonremove = (Button)findViewById(R.id.removeMarker);
buttonremove.setText("Remove");
/* Location myLocation = mMap.getMyLocation();
mMap.addMarker(new MarkerOptions()
.position(new LatLng(myLocation.getLatitude(), myLocation.getLongitude()))
.title("Hi I'm Here..:D")
);*/
// Marker to Dinemore
mMap.addMarker(new MarkerOptions()
.position(LOCATION_DINEMORE)
.title("Dinemore")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE))
);
// Marker to Barista
mMap.addMarker(new MarkerOptions()
.position(LOCATION_BARISTA)
.title("Barista Lavazza")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE))
);
// Marker to Avenra Garden Hotel
mMap.addMarker(new MarkerOptions()
.position(LOCATION_AVENRA)
.title("Avenra Garden")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW))
);
// Marker to Mounbatten Bunglow
mMap.addMarker(new MarkerOptions()
.position(LOCATION_MOUNTBATTEN)
.title("Mounbatten Bunglow")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW))
);
//When touch again on the map marker title will hide
mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
}
});
ArrayList<Marker> category1=new ArrayList<>();
ArrayList<Marker> category2=new ArrayList<>();
for (int i=0; i< category1.size(); i++){
category1.get(i).remove();
}
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
public void onClick_City(View v){
mMap.setMyLocationEnabled(true);
}
// When click on this button, Map shows the place of Dinemore
public void onClick_Loc1(View v) {
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_DINEMORE,10);
mMap.animateCamera(update);
}
// When click on this button, Map shows the place of Barista
public void onClick_Loc2(View v) {
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_BARISTA,10);
mMap.animateCamera(update);
}
// To rmove All the Markers
public void onClick_Remove(View v){
mMap.clear();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
setUpMap();
}
}
}
/**
* This is where we can add markers or lines, add listeners or move the camera. In this case, we
* just add a marker near Africa.
* <p/>
* This should only be called once and when we are sure that {@link #mMap} is not null.
*/
private void setUpMap() {
mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
}
这是我的 activity_maps.xml 文件。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="10dip"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="10dip"
tools:context=".MapsActivity">
<Button
android:id="@+id/btnLoc1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btnCity"
android:layout_alignParentTop="true"
android:onClick="onClick_Loc1"/>
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_below="@+id/btnLoc1"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<Button
android:id="@+id/btnCity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btnLoc2"
android:layout_alignParentTop="true"
android:onClick="onClick_City"/>
<Button
android:id="@+id/btnLoc2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:onClick="onClick_Loc2"/>
<Button
android:id="@+id/removeMarker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:onClick="onClick_Remove"/>
<CheckBox android:id="@+id/checkbox_restaurant"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btnLoc1"
android:text="Restaurants"
android:onClick="onCheckboxClicked"/>
<CheckBox android:id="@+id/checkbox_hotels"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/checkbox_restaurant"
android:text="Hotels"
android:onClick="onCheckboxClicked"/>
我该怎么做?
提前致谢。
最佳答案
这里有一些隐藏的问题。您需要将不同的任务分开:
您需要保留一份餐厅和酒吧列表,一个包含餐厅表和酒吧表的 SQLite 数据库是一个不错的选择。
您可以查询数据库并填充 POJO 对象列表,并在选中复选框时使用这些列表生成标记。
然后,您需要保留一个单独的标记列表,以便在取消选中复选框时,您可以从 map 中删除标记。
这是我用硬编码值快速组合在一起的一个简单示例,您稍后需要添加数据库部分。
public class CheckMapActivity extends AppCompatActivity
implements OnMapReadyCallback {
GoogleMap googleMap;
List<MapLocation> restaurantList;
List<MapLocation> barList;
List<Marker> restaurantMarkers = new ArrayList<>();
List<Marker> barMarkers = new ArrayList<>();
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check_map);
//Eventually load from a database
//Hard coded here for now
restaurantList = new ArrayList<>();
barList = new ArrayList<>();
MapLocation r1 = new MapLocation(37.78344,-122.42578, "Restaurant One" );
MapLocation r2 = new MapLocation(37.7876965,-122.4106738, "Restaurant Two" );
restaurantList.add(r1);
restaurantList.add(r2);
MapLocation b1 = new MapLocation(37.7866028,-122.4044511, "Bar One" );
MapLocation b2 = new MapLocation(37.7864459,-122.4090323, "Bar Two" );
barList.add(b1);
barList.add(b2);
CheckBox checkRestaurants = (CheckBox) findViewById(R.id.checkRestaurants);
checkRestaurants.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
showRestaurants();
} else {
hideRestaurants();
}
}
});
CheckBox checBars = (CheckBox) findViewById(R.id.checkBars);
checBars.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
showBars();
} else {
hideBars();
}
}
});
}
@Override
protected void onResume() {
super.onResume();
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
googleMap = map;
setUpMap();
}
public void setUpMap() {
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
}
public void showRestaurants() {
restaurantMarkers.clear();
for (MapLocation loc : restaurantList){
Marker marker = googleMap.addMarker(new MarkerOptions()
.position(new LatLng(loc.lat, loc.lon))
.title(loc.title)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(loc.lat, loc.lon)).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
restaurantMarkers.add(marker);
}
}
public void showBars() {
barMarkers.clear();
for (MapLocation loc : barList){
Marker marker = googleMap.addMarker(new MarkerOptions()
.position(new LatLng(loc.lat, loc.lon))
.title(loc.title)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(loc.lat, loc.lon)).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
barMarkers.add(marker);
}
}
public void hideRestaurants(){
for (Marker marker : restaurantMarkers){
marker.remove();
}
}
public void hideBars(){
for (Marker marker : barMarkers){
marker.remove();
}
}
//POJO to hold locations:
public class MapLocation {
public MapLocation(double lt, double ln, String t){
lat = lt;
lon = ln;
title = t;
}
public double lat;
public double lon;
public String title;
}
}
这是布局,activity_check_map.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.daniel.tabstest.CheckMapActivity">
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="500dp"/>
<LinearLayout
android:layout_alignBottom="@+id/map"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<CheckBox
android:id="@+id/checkRestaurants"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Restaurants" />
<CheckBox
android:id="@+id/checkBars"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bars" />
</LinearLayout>
</RelativeLayout>
结果:
检查的餐厅:
检查的餐厅和酒吧:
检查栏:
没有检查:
关于android - 如何在 Android 中使用 Google map 按类别隐藏/显示标记组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006206/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 9 个月前关闭。 Improve
我使用 partykit打包并遇到以下错误消息: Error in matrix(0, nrow = mi, ncol = nl) : invalid 'nrow' value (too large
我一直在尝试寻找一个量表或分类指标,为 VADER 情绪分析分配一些情感程度,而不仅仅是积极、消极或中性。如果有人可以分享他们的观点或资源来帮助按以下方式对 VADER 复合分数进行分类,我将非常感激
伙计们,我想自动循环..但我不知道是我放错了 while 还是循环错了? 我的数据库 标签:kt_barang kd_kategori | nama_kategori 1
我正在创建一个列出本地企业并按类别、子类别和关键字对它们进行分组的应用程序。以下是企业排序规则: 一个企业可以属于多个类别和子类别 一个企业可以有多个关键字 并非每个类别都有子类别,但有子类别的只有两
我有一系列单词 - 我的刺激 - 它们显示在屏幕上。然而,每个词都有另一个“条件”,即它们是类别 A、类别 B 或类别 C。这可能很简单,但我找不到答案并坚持下去。我的最终目标是在每次运行脚本时将类别
我正在使用 Laravel 5.5 和 MySql。如果不向 Services 表中添加 subCategoryID 列,我无法弄清楚如何将类别和子类别与服务相关联。 目前这是我的表结构 服务类别 i
我有两个部分/类别结构的链接表。 the section table structure id sec_title 1 section 1 2 section 2 the category str
我有一个类层次结构如下 @interface PTLDatasource : NSObject ... @interface PTLFetchedDatasource : PTLDatasource
我有一个 DataFrame df 一列,category 使用以下代码创建: import pandas as pd import random as rand from string import
我经常在多个类中设置获取请求以从核心数据(加上一些其他结果)中检索“allRecipes”或“lastModifiedDate”。 为此使用专门的类别 NSManagedObjectContext+R
可以在 Objective C 中创建类别之间的依赖关系吗?也在类别和它们的基类之间? 我知道在运行时应该没有区别,它们可能只是在编译时合并在一起。例如,假设我将 B 类分解为: B(base cla
这个问题在这里已经有了答案: 关闭 10 年前。
example img of a category selection by user 嘿,我正在尝试设置一个选择,用户必须选择一个类别和第二个类别,但我不知道如何获取他单击的信息。用户单击类别后,它
尝试将投资组合库添加到我正在制作的自定义 wp 主题中。我已经筋疲力尽地试图寻找甚至可以修改一些的解决方案和插件。我认为我在寻找解决方案时遇到的一个问题是我不完全确定哪些搜索词可以帮助我找到与我想要实
当我查看 Cocoa Touch API 时,我可以在同一个头文件中找到一些与类别一起声明的类,例如 @interface NSArray : NSObject @property (readonl
我的 log4j.properties 中有以下内容 log4j.rootLogger = debug, stdout, fileLog log4j.appender.stdout = org.apa
如果我在类中添加类别方法,比如NSXMLNode: @interface NSXMLNode (mycat) - (void)myFunc; @end NSXMLNode 的子类,例如 NSXMLEl
先说场景,wordpress的分类结构是这样的 Level 1: Top Level 2: -Nextme_1 Level 3: --Nextme_2 --Nextme_3 Leve
我有一个解析网络,现在我想浏览标签,或显示图表。我怎样才能得到图表?或者在树中导航。显示第一步然后其他等。并了解这棵树是如何 build 的。 import urllib from lxml impo
我是一名优秀的程序员,十分优秀!