2017-02-19 2 views
0

Ich versuche diese Codes, um benutzerdefinierte Info-Fenster für meine Marker zu erstellen. Ich möchte, dass die Info permanent erscheint und ich möchte auch das Bild des Info-Fensters basierend auf einer bestimmten Logik dynamisch ändern. Ich habe einige Codes aus meiner Google-Suche wie folgt angepasst.Android Google Karte benutzerdefinierte Infofenster Fehler schließen abrupt

public static MapActivityFragment1 newInstance(String param1, String param2) { 
     MapActivityFragment1 fragment = new MapActivityFragment1(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_map_activity_fragment1, null, false); 

     SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
     tv = (TextView) view.findViewById(R.id.textRefresh); 
     customHandler = new android.os.Handler(); 
     customHandler.postDelayed(updateTimerThread, 0); 
     mMap.setInfoWindowAdapter(new BalloonAdapter(getLayoutInflater(savedInstanceState))); 
     return view; 
    } 
    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
    } 


private class Getdata extends AsyncTask<String, Void, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      //pDialog = new ProgressDialog(MyMapActivity.this); 
      //pDialog.setMessage("Please wait..."); 
      //pDialog.setCancelable(false); 
      //pDialog.show(); 

     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       String fID= params[0]; 

       URL url = new URL("http://******.php"); 
       JSONObject postDataParams = new JSONObject(); 
       postDataParams.put("fID", fID); 
       Log.e("params", postDataParams.toString()); 


       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(15000 /* milliseconds */); 
       conn.setConnectTimeout(15000 /* milliseconds */); 
       conn.setRequestMethod("POST"); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 

       OutputStream os = conn.getOutputStream(); 
       BufferedWriter writer = new BufferedWriter(
         new OutputStreamWriter(os, "UTF-8")); 
       writer.write(getPostDataString(postDataParams)); 

       writer.flush(); 
       writer.close(); 
       os.close(); 
       int responseCode = conn.getResponseCode(); 

       if (responseCode == HttpURLConnection.HTTP_OK) { 

        BufferedReader in=new BufferedReader(
          new InputStreamReader(
            conn.getInputStream())); 
        StringBuffer sb = new StringBuffer(""); 
        String line=""; 

        while((line = in.readLine()) != null) { 

         sb.append(line); 
         break; 
        } 

        in.close(); 
        return sb.toString(); 

       } 
       else { 
        return new String("false : "+responseCode); 
       } 


      } catch (Exception e) { 
       return new String("Exception: " + e.getMessage()); 
      } 


     } 


     @Override 
     protected void onPostExecute(String result) { 
      String s = result.trim(); 
      //Toast.makeText(getApplicationContext(), "restult is"+s, Toast.LENGTH_LONG).show(); 
      String stringSucess = ""; 

      int height = 50; 
      int width = 40; 
      BitmapDrawable bitmapdraw=(BitmapDrawable)getResources().getDrawable(R.drawable.basgray); 
      Bitmap b=bitmapdraw.getBitmap(); 
      Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false); 
      LatLng sydney = new LatLng(-34, 151); 
      mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney").icon(BitmapDescriptorFactory.fromBitmap(smallMarker))); 
      mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 

      //setListAdapter(adapter); 
     } 

    } 

Hier ist die Codes für meine BallonAdapter

public class BalloonAdapter implements InfoWindowAdapter { 
    LayoutInflater inflater = null; 
    private TextView textViewTitle; 

    public BalloonAdapter(LayoutInflater inflater) { 
     this.inflater = inflater; 
    } 

    @Override 
    public View getInfoWindow(Marker marker) { 
     View v = inflater.inflate(R.layout.balloon, null); 
     if (marker != null) { 
      textViewTitle = (TextView) v.findViewById(R.id.textViewTitle); 
      textViewTitle.setText(marker.getTitle()); 
     } 
     return (v); 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 
     return (null); 
    } 
} 

Als ich anmelden und kommt zu diesem Fragment die Anwendung einfach aufhören. Wo kann ich nach dem Log-in-Szenario suchen oder muss ich es separat aufzeichnen, weil ich nichts in Android-Studio angemeldet sehe. Das Problem ist in dieser Zeile mMap.setInfoWindowAdapter (new BalloonAdapter (getLayoutInFlater (savedInstanceState))); in der öffentlichen View onCreateView-Funktion.

Antwort

0

Um anderen zu helfen, fand ich die Lösung, was ich gerade hinzugefügt habe diese mMap.setInfoWindowAdapter (new BalloonAdapter (getLayoutInFlater (null))); Rückansicht; } Bedeutung Ich ersetze mit dem Wort null und es funktioniert jetzt. IT sieht jetzt gut aus.

Verwandte Themen