我创建了一个地址数组,其中有5个值。
String address[] = {
"New York",
"Sydney",
"Brisbane",
"Paris",
"Milan"
}
我在onClicklistener
中为事件MapsActivity
编写了代码。我使用此事件在我的地图活动中使用数组值中的标题搜索某个标记。
btncari.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for(int i=0; i < address.length; i++) {
if (nama[i].equalsIgnoreCase(editcari.getText().toString().trim())) {
marker.remove();
myMap.addMarker(new MarkerOptions().position(new LatLng(lat[i], lon[i])).title(nama[i])
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_wisata))
);
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
{
editcari.setText("Unavailable");
}
}}
});
如果我想在EditText
中键入一些地址,但这些字词与实际地址值不完全相同,例如,如果我在EditText
上仅键入“ari”,则会显示“Paris”,所以我不需要在数组值中键入完整地址。如何解决这个问题?
答案 0 :(得分:1)
您可以使用
nama[i].toLowerCase().contains(editcari.getText().toString().trim().toLowerCase())
// ^^^^^^^^^^ convert array values to lowercase
// convert input to lower case ^^^^^^^^^^^^^^^^^^^^
// check array value contains the input
或将数组中的值添加为小写,然后使用nama[i].contains
和一点改进
String input = editcari.getText().toString().trim().toLowerCase();
// take input only once , outside loop
for(int i=0; i < address.length; i++) {
if (nama[i].toLowerCase().contains(input)) {