吐司不会消失

时间:2017-08-30 17:00:05

标签: java android mobile

我编写的代码是我从数组值中获取标记的。我在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”的地址阵列。当我尝试输入悉尼时,它应显示地址不可用。

3 个答案:

答案 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();
    }
});