我编写的代码是我从数组值中获取标记的。我在else
条件下举杯祝酒。当我尝试运行它时,吐司并没有消失。如果我直接按下搜索按钮,它将转到数组的第一个值。
以下是代码:
btnsearch.setOnClickListener(new View.OnClickListener() {
int duration = Toast.LENGTH_SHORT;
@Override
public void onClick(View view) {
for(int i=0; i < address.length; i++) {
if (address[i].toLowerCase().contains(editsearch.getText().toString().trim().toLowerCase())){
marker.remove();
myMap.addMarker(new MarkerOptions().position(new LatLng(lat[i],lon[i])).title(address[i]).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)));
CameraPosition campos = new CameraPosition.Builder()
.target(new LatLng(lat[i],lon[i]))
.zoom(18)
.build();
CameraUpdate camUpd3 = CameraUpdateFactory.newCameraPosition(campos);
myMap.animateCamera(camUpd3);
break;
}
}
Toast.makeText(Myactivity.this, "Error", duration).show();
}
});
我试图得到错误的结果,所以我可以看到吐司消息,但是当我输入正确的值时,它仍然在else
条件下。
我希望在输入错误值时显示toast消息。该值例如是“Paris”“Rome”“Alberta”“Zurich”的地址阵列。当我尝试输入悉尼时,它应显示地址不可用。
答案 0 :(得分:4)
这种情况正在发生,因为每次在for循环中进行迭代时都会进行烘烤。当条件为假时,每次迭代时都会进入else部分。要解决此问题,您只需要从Toast
中获取for loop
。
希望它有所帮助。
答案 1 :(得分:0)
是的,For-Loop多次击中该状态并使吐司看起来是静态的,而事实上它只是同时调用了一堆。 Android将这些toast投入到队列中,并按接收顺序逐个显示它们。尝试这样的事情,它将计算错误并在循环结束时显示一个单一的吐司:
btnsearch.setOnClickListener(new View.OnClickListener() {
int errorcount = 0;
int duration = Toast.LENGTH_SHORT;
@Override
public void onClick(View view) {
for(int i=0; i < address.length; i++) {
if (address[i].toLowerCase().contains(editsearch.getText().toString().trim().toLowerCase())){
marker.remove();
myMap.addMarker(new MarkerOptions().position(new LatLng(lat[i],lon[i])).title(address[i]).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)));
CameraPosition campos = new CameraPosition.Builder()
.target(new LatLng(lat[i],lon[i]))
.zoom(18)
.build();
CameraUpdate camUpd3 = CameraUpdateFactory.newCameraPosition(campos);
myMap.animateCamera(camUpd3);
break;
} else {
errorcount++;
}
}
Toast.makeText(Myactivity.this, "Finished with " + errorcount + " errors.", duration).show();
}
});
答案 2 :(得分:0)
添加布尔标志以检查是否找到地址
btnsearch.setOnClickListener(new View.OnClickListener() {
int duration = Toast.LENGTH_SHORT;
@Override
public void onClick(View view) {
boolean found = true;
for(int i=0; i < address.length; i++) {
if (address[i].toLowerCase().contains(editsearch.getText().toString().trim().toLowerCase())){
found = true;
marker.remove();
myMap.addMarker(new MarkerOptions().position(new LatLng(lat[i],lon[i])).title(address[i]).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)));
CameraPosition campos = new CameraPosition.Builder()
.target(new LatLng(lat[i],lon[i]))
.zoom(18)
.build();
CameraUpdate camUpd3 = CameraUpdateFactory.newCameraPosition(campos);
myMap.animateCamera(camUpd3);
break;
} else {
found = false;
}
}
if(!found) Toast.makeText(Myactivity.this, "Error", duration).show();
}
});