2016-03-31 27 views
0

Yani bulun burada benim problem Bu gibi ayrı işaretçileri tarafından: Arama işaretçileri ve onlara

//Carciuma 
    LatLng test1 = new LatLng(43.604892, 1.476562); 
    mMap.addMarker(beerMarker.position(test1).title("Carciuma")); 

Ben aşağıdaki yöntemler ilan ettiler:

private void gotoLocation(double lat, double lng, float zoom){ 

    LatLng latLng = new LatLng(lat, lng); 
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(latLng, zoom); 
    mMap.moveCamera(update); 
} 

private void hideSoftKeyboard(View v){ 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 


public void locateFromString(View view) { 

    hideSoftKeyboard(view); 

    TextView tv = (TextView) findViewById(R.id.editText1); 
    String searchString = tv.getText().toString(); 

Haritalarımda, yalnızca dizimin dizileri içinde arama yapmak istediğim bir arama alanı oluşturdum. Dolayısıyla, kullanıcı tarafından tanıtılan işaretçi ismini bulmak için arama düğmesine bastığımda locateFromString yöntemi çağrılır. Bu yöntem, kullanıcı tarafından tanıtılan işaretin dizide var olup olmadığını görmelidir. Varsa, aranan işaretin dizide olmadığını belirten bir Tost görüntülenmemesi durumunda gotoLocation yöntemi ile konumlandırılmalıdır.

Bunu tam olarak nasıl yapmak zorundayım? Dizinin içinde arama yapın ve adı bulmak için isim bulunursa?

Yanıtlarınız için şimdiden teşekkür ederiz!

GÜNCELLEME

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { 

GoogleMap mMap; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 



    assert getSupportActionBar() != null; 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setLogo(R.mipmap.ic_launcher); 
    actionBar.setDisplayUseLogoEnabled(true); 
    actionBar.setDisplayShowHomeEnabled(true); 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()){ 

     case R.id.location: 
      Toast.makeText(getApplicationContext(), "Location selected", Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.map_type: 
      Toast.makeText(getApplicationContext(), "Map Type selected", Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.share_app: 
      Toast.makeText(getApplicationContext(), "Share the APP", Toast.LENGTH_LONG).show(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

} 

@Override 
public void onMapReady(GoogleMap googleMap) { 

    mMap = googleMap; 


    LatLng cityView = new LatLng(43.604346, 1.443760); 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(cityView, 12)); 


    MarkerOptions beerMarker = new MarkerOptions() 
          .icon(BitmapDescriptorFactory.fromResource(R.drawable.beer_marker)); 


    // The Thirsty monk 
    LatLng thirstyMonk = new LatLng(43.607044, 1.450307); 
    mMap.addMarker(beerMarker.position(thirstyMonk).title("Thirsty Monk")); 
    // The Cocolino 
    LatLng cocolino = new LatLng(43.571505, 1.417759); 
    mMap.addMarker(beerMarker.position(cocolino).title("Cocolino")); 
    //The Melting Pot 
    LatLng meltingPot = new LatLng(43.607469, 1.447162); 
    mMap.addMarker(beerMarker.position(meltingPot).title("The Melting Pot")); 
    //De Danu 
    LatLng deDanu = new LatLng(43.600723, 1.455917); 
    mMap.addMarker(beerMarker.position(deDanu).title("De Danu")); 
    //Carciuma 
    LatLng test1 = new LatLng(43.604892, 1.476562); 
    mMap.addMarker(beerMarker.position(test1).title("Carciuma")); 
    //Test2 
    LatLng test2 = new LatLng(43.604496, 1.474924); 
    mMap.addMarker(beerMarker.position(test2).title("Boca")); 
    //Test3 
    LatLng test3 = new LatLng(43.604781, 1.474502); 
    mMap.addMarker(beerMarker.position(test3).title("Bar Acasa")); 

} 

private void gotoLocation(double lat, double lng, float zoom){ 

    LatLng latLng = new LatLng(lat, lng); 
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(latLng, zoom); 
    mMap.moveCamera(update); 
} 

private void hideSoftKeyboard(View v){ 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 


public void locateFromString(View view) { 

    hideSoftKeyboard(view); 

    TextView tv = (TextView) findViewById(R.id.editText1); 
    String searchString = tv.getText().toString(); 



    ArrayList<String> thePlaces = new ArrayList<>(); 
    thePlaces.add("Thirsty Monk"); 
    thePlaces.add("Cocolino"); 
    thePlaces.add("The Melting Pot"); 
    thePlaces.add("De Danu"); 
    thePlaces.add("Carciuma"); 
    thePlaces.add("Boca"); 
    thePlaces.add("Bar Acasa"); 


    ArrayList<String> places = new ArrayList<String>(Arrays.asList(thePlaces)); 
    if (places.contains(searchString)) { 



     //do something 
    }; 

    // if (thePlaces.contains(searchString)){ 



    //if (searchString.length() > 0){ 

     // Toast.makeText(this, "Searching for: " + searchString, Toast.LENGTH_SHORT).show(); 

    //} else { 
    //  Toast.makeText(this, "There is no " + searchString + " subscribed to this app!", Toast.LENGTH_LONG).show(); 
    // } 


    //Geocoder gc = new Geocoder(this); 


} 

}

son satırları Ben orta bunu böylece çalıştı bazı şeyler vardır!

GÜNCELLEME burada XML Ben Otomatik tamamlamada ile EditText değişti:

04-02 19: 42: 08.791 11.984-11.984/com.gadgetcatch.happyhourtoulouse İşte

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.gadgetcatch.happyhourtoulouse.MainActivity"> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:orientation="horizontal" 
     android:id="@+id/search_pub" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp"> 


     <AutoCompleteTextView 
      android:id="@+id/editText1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_toLeftOf="@+id/button1" 
      android:layout_toStartOf="@+id/button1" 
      android:ems="10" 
      android:hint="@string/search_pub" 
      android:inputType="textCapWords"> 

      <requestFocus /> 
     </AutoCompleteTextView> 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentRight="true" 
      android:text="@string/search_go" 
      android:onClick="locateFromString"/> 
    </RelativeLayout> 

    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/map" 
     class="com.google.android.gms.maps.SupportMapFragment"/> 


</LinearLayout> 

o günlüğü olduğu E/AndroidRuntime: FATAL EXCEPTION: ana İşlem: com.gadgetcatch.happyhourtoulouse, PID: 11984 java.lang.IllegalStateException: android için yöntem yürütülemedi: onClick , android.support.v7.app.AppCompatVi android.view.View $ PerformClick.run (View.java:21179) android de de android.view.View.performClick (View.java:5254) de ewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:293) . android.app adresinde, android.os.Looper.loop (Looper.java:145) adresinde, android.app adresinde bulunan adresinde yer almaktadır. Java.lang.reflect.Method.invoke (Yerel Yöntem) at java.lang.reflect.Method.invoke (Yöntem.java:372) at.android.internal .işletim sistemi. com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1199) de ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1404) Nedeni: java.lang.reflect de java.lang.reflect.InvocationTargetException .Method.invoke (Yerel Yöntem) java.lang.reflect.Method.invoke (Yöntem.java: 372) at android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:288) at android.view.View.performClick (View.java:5254) at android.view.View $ Android.os.Looper adresindeki android.os.Handler.dispatchMessage (Handler.java:95) adresindeki android.os.Handler.handleCallback (View.java:21179) 'da (View.java:21179) ViewClick.run (View.java:21179) . loop (Looper.java:145) at android.app.ActivityThread.main (ActivityThread.java:6837) java.lang.reflect.Method.invoke adresinden (Yerel Yöntem) java.lang.refle adresinde com.android.internal.os.ZygoteInit.main (ZygoteInit.) adresinde com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1404) numaralı telefondan (Method.java:372) . java: 1199) Nedeniyle: java.lang.NullPointerException: sanal bir yöntem 'boolean java.util.ArrayList.contains (java.lang.Object)' öğesini, null object reference çağrısında com.gadgetcatch.happyhourtoulouse.MainActivity olarak çağırmayı deneyin. java.lang.reflect.Method.invoke (Yerel Yöntem) adresindeki java.lang.reflect.Method.invoke (Method.java:372) adresindeki android.support.v7 adresindeki .locateFromString (MainActivity.java:182) . app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (APPC ompatViewInflater.java:288) android.view.View.performDaha sonra (View.java:5254) , android.view.View $ PerformClick.run (View.java:21179) at android.os.Handler.handleCallback (ompatViewInflater.java:288) Handler.java:739) android.os.Looper.loop (Looper.java:145) 'de , android.app.ActivityThread.main (ActivityThread) adresinden android.os.Handler.dispatchMessage (Handler.java:95) . java: 6837) java.lang.reflect.Method.invoke adresinde (Yerel Yöntem) java.lang.reflect.Method.invoke adresinde (Yöntem.java:372) com.android.internal.os.ZygoteInit $ MethodAndArgsCalle com.android.internal.os.ZygoteInit.main de r.run (ZygoteInit.java:1404) (ZygoteInit.java:1199)

cevap

1

bir ArrayList dizi dönüştürme sorunu değilse - kullanabileceğiniz searchString'in listede olup olmadığını kontrol etmek için includes() yöntemi. Aramanız büyük/küçük harfe duyarlı değilse - değerleri diziden ve searchString'den büyük/küçük harfe dönüştürün. locateFromString yöntemle ilgili olarak

... 
    ArrayList<String> places = new ArrayList<>(Arrays.asList(thePlaces)); 
    if (places.contains(searchString)) { 
     //do something 
    }; 

GÜNCELLEME

- Zaten bir ArrayList thePlaces beri places için gerek yoktur: Aşağıdaki örneğe bakın. Ayrıca thePlaces örneğini mMap gibi bir örnek değişkeni yapmayı ve onCreate içinde veya bir başlatıcı bloğunda doldurmayı öneririm. Bu şekilde, dizi listesi her seferinde bir kez oluşturulur ve her locateFromString numaralı telefonu aramazsınız.

public void locateFromString(View view) { 
    hideSoftKeyboard(view); 
    TextView tv = (TextView) findViewById(R.id.editText1); 
    String searchString = tv.getText().toString(); 

    ArrayList<String> thePlaces = new ArrayList<>(); 
    thePlaces.add("Thirsty Monk"); 
    thePlaces.add("Cocolino"); 
    thePlaces.add("The Melting Pot"); 
    thePlaces.add("De Danu"); 
    thePlaces.add("Carciuma"); 
    thePlaces.add("Boca"); 
    thePlaces.add("Bar Acasa"); 


    if (thePlaces.contains(searchString)) { 
     //call goToLocation 
    } else { 
     Toast.makeText(this, "There is no " + searchString + " subscribed to this app!", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

ArrayList thePlaces = new ArrayList <>(); thePlaces.add ("Susuz Keşiş"); thePlaces.add ("Cocolino"); thePlaces.add ("Erime Kazanı"); thePlaces.add ("De Danu"); thePlaces.add ("Carciuma"); thePlaces.("Boca") ekleyin; thePlaces.add ("Bar Acasa"); Yukarıdaki gibi ArrayList olarak değiştirdim. Bunu yapamayacağımı düşündüğünüz kodu nereden almalıyım? –

+0

Simgelerin yerini çözemediğini söyler ... –

+0

'searchString' kullanıcı girişini temsil ediyor mu? Öyleyse, 'locateFromString' yönteminde' searchString' başlatmasının hemen altına koyun. –