如何停止 运行 runOnUiThread Runnable
How do I Stop a running runOnUiThread Runnable
我希望能够打开和关闭 MyLocationNewOverlay。我当前的代码是:-
void btnTrack() {
btnTrack = (Button) findViewById(R.id.btnStart);
btnTrack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String btnText = btnTrack.getText().toString();
GpsMyLocationProvider provider = new GpsMyLocationProvider(ctx);
provider.addLocationSource(LocationManager.NETWORK_PROVIDER);
// My Location Overlay
MyLocationNewOverlay mysLocationoverlay = new MyLocationNewOverlay(provider, map);
if (btnText.equalsIgnoreCase("Start")) {
/**************************************************************************
* Get and display the current location
**************************************************************************/
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mysLocationoverlay.enableMyLocation(); // not on by default
mysLocationoverlay.setDirectionArrow(BitmapFactory.decodeResource(getResources(),
R.drawable.marker_node), BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi_default));
mysLocationoverlay.runOnFirstFix(new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
btnTrack.setText("CANCEL");
}
});
}
});
map.getOverlays().add(mysLocationoverlay);
}
else {
mysLocationoverlay.disableMyLocation();
mysLocationoverlay.disableFollowLocation();
map.getOverlays().remove(mysLocationoverlay);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
btnTrack.setText("START");
}
}
});
}
我很确定问题出在 runnable 上,但是当我将按钮切换到“取消”led 时,我看不到任何终止它的方法。
我正在使用 osmdroid v6.1.0 和 osmbonuspack v6.6.0
如何停止运行?
每次单击按钮时,您都在创建 MyLocationNewOverlay 的本地实例。
第一次单击按钮时,会创建、激活 MyLocationNewOverlay 实例并将其添加到地图视图中。
第二次单击该按钮时,将创建另一个新的 MyLocationOverlay 实例。这个新实例被停用并从地图视图中删除 - 好吧,不是真的,因为它从未被激活或添加过。
我建议在您的 activity(或片段,取决于您的情况)中保留对 MyLocationOverlay 实例的引用,并仅在第一次单击按钮时创建它(检查是否为空)。
我希望能够打开和关闭 MyLocationNewOverlay。我当前的代码是:-
void btnTrack() {
btnTrack = (Button) findViewById(R.id.btnStart);
btnTrack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String btnText = btnTrack.getText().toString();
GpsMyLocationProvider provider = new GpsMyLocationProvider(ctx);
provider.addLocationSource(LocationManager.NETWORK_PROVIDER);
// My Location Overlay
MyLocationNewOverlay mysLocationoverlay = new MyLocationNewOverlay(provider, map);
if (btnText.equalsIgnoreCase("Start")) {
/**************************************************************************
* Get and display the current location
**************************************************************************/
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mysLocationoverlay.enableMyLocation(); // not on by default
mysLocationoverlay.setDirectionArrow(BitmapFactory.decodeResource(getResources(),
R.drawable.marker_node), BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi_default));
mysLocationoverlay.runOnFirstFix(new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
btnTrack.setText("CANCEL");
}
});
}
});
map.getOverlays().add(mysLocationoverlay);
}
else {
mysLocationoverlay.disableMyLocation();
mysLocationoverlay.disableFollowLocation();
map.getOverlays().remove(mysLocationoverlay);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
btnTrack.setText("START");
}
}
});
}
我很确定问题出在 runnable 上,但是当我将按钮切换到“取消”led 时,我看不到任何终止它的方法。
我正在使用 osmdroid v6.1.0 和 osmbonuspack v6.6.0
如何停止运行?
每次单击按钮时,您都在创建 MyLocationNewOverlay 的本地实例。
第一次单击按钮时,会创建、激活 MyLocationNewOverlay 实例并将其添加到地图视图中。
第二次单击该按钮时,将创建另一个新的 MyLocationOverlay 实例。这个新实例被停用并从地图视图中删除 - 好吧,不是真的,因为它从未被激活或添加过。
我建议在您的 activity(或片段,取决于您的情况)中保留对 MyLocationOverlay 实例的引用,并仅在第一次单击按钮时创建它(检查是否为空)。