2017-08-30 48 views
1

我製作了一個地址數組,其中有5個值。使用數組中的editText搜索相關詞

String address[] = { 
    "New York", 
    "Sydney", 
    "Brisbane", 
    "Paris", 
    "Milan" 
} 

MapsActivity寫了事件onClicklistener代碼。我使用這個事件來搜索我的地圖活動中的某個標記,並使用數組的值標題。

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」鍵入它會顯示「巴黎」,所以我不t需要在數組中輸入完整的地址。如何解決這個問題呢?

+0

使用textwatcher代替ü不會需要定義按鈕,它是一個簡單快捷的解決方案,文本監視器自動從您的編輯文本中獲取文本並從給定的數組列表中進行搜索 –

+0

如果有超過2個el包含輸入文本的元素? – user3437460

+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)) { 
+0

是否只忽略小寫和大寫?我需要輸入一些與數組值相關的單詞,比如我輸入「ari」它會顯示「paris」 –

+0

yes和contains將覆蓋你想要檢查巴黎的部分包含ari它會給你真正的 –

+0

我有另一個問題是,當我直接按「搜索」按鈕,它會顯示第一個數組。 if(!input.isEmpty()){//您的循環代碼} else {//顯示錯誤}' –