Domanda

Ho un listview che contiene un paio di compagnie di taxi. Quando un utente fa clic sul nome di un taxi, si vede una scatola alertdialog chiedendo loro di entrambi libro, mostra mappa o annullare. Ciò che im cercando di ottenere è quando l'utente fa clic visualizza cartina, afferra la posizione da una matrice di stringhe già impostato, e quindi da punti sulla mappa. Non voglio che per trovare la mia posizione attuale di come ancora. questo è possibile fare? ho già un setup mapview che attualmente punti solo per un insieme posizione casuale dal tutorial.

Questo è il mio codice per entrambi:

    ListTaxi Class : 

             class Taxi {
    private String taxiName;
    private String taxiAddress;
    private String taxiDist;

    public String getName() {
        return taxiName;
    }

    public void setName(String name) {
        taxiName = name;
    }

    public String getAddress() {
        return taxiAddress;
    }

    public void setAddress(String address) {
        taxiAddress = address;
    }
    public String getDist() {
        return taxiDist;
    }
    public void setDist(String dist){
        taxiDist = dist;
    }
    public Taxi(String name, String address, String dist) {
        taxiName = name;
        taxiAddress = address;
        taxiDist = dist;
    }
}

public class TaxiAdapter extends ArrayAdapter<Taxi> {
    private ArrayList<Taxi> items;
    private TaxiViewHolder taxiHolder;

    private class TaxiViewHolder {
        TextView name;
        TextView address; 
        TextView dist;
    }

    public TaxiAdapter(Context context, int tvResId, ArrayList<Taxi> items) {
        super(context, tvResId, items);
        this.items = items;
    }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.taxi_list_item, null);
            taxiHolder = new TaxiViewHolder();
            taxiHolder.name = (TextView)v.findViewById(R.id.taxi_name);
            taxiHolder.address = (TextView)v.findViewById(R.id.taxi_address);
            taxiHolder.dist = (TextView)v.findViewById(R.id.taxi_dist);
            v.setTag(taxiHolder);
        } else taxiHolder = (TaxiViewHolder)v.getTag(); 

        Taxi taxi = items.get(pos);

        if (taxi != null) {
            taxiHolder.name.setText(taxi.getName());
            taxiHolder.address.setText(taxi.getAddress());
            taxiHolder.dist.setText(taxi.getDist());
        }

        return v;
    }
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listtaxi);

    final String[] taxiNames = getResources().getStringArray(R.array.taxi_name_array);
    final String[] taxiAddresses = getResources().getStringArray(R.array.taxi_address_array);
    final String[] taxiDist = getResources().getStringArray(R.array.taxi_array_dist);
    ArrayList<Taxi> taxiList = new ArrayList<Taxi>();

    for (int i = 0; i < taxiNames.length; i++) {
        taxiList.add(new Taxi(taxiNames[i], taxiAddresses[i], taxiDist[i]));

    }


    setListAdapter(new TaxiAdapter(this, R.layout.taxi_list_item, taxiList));  

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);

        lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> a, View v, final int position, long id)
        {       

            final int selectedPosition = position;
            AlertDialog.Builder adb=new AlertDialog.Builder(ListTaxi.this); 
             adb.setTitle("Taxi Booking");
             adb.setMessage("You Have Selected: "+taxiNames[selectedPosition]); 
             adb.setPositiveButton("Book", new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int id) {
                     Intent intent = new Intent(ListTaxi.this, Booking.class);
                     intent.putExtra("booking",  taxiNames[selectedPosition]);
                     intent.putExtra("address",  taxiAddresses[selectedPosition]);
                     intent.putExtra("distance", taxiDist[selectedPosition]);
                     startActivity(intent);
                 }
             });
             adb.setNeutralButton("Show Map", new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int id) {
                     Intent intent = new Intent(ListTaxi.this, Map.class);
                     startActivity(intent);
                 }
             });

             adb.setNegativeButton("Cancel", null); 
             adb.show();
         }
     });     
}

}

e la mia classe mappa è:                 / **  *  * / pacchetto com.taxime;

    public class Map extends MapActivity{
LinearLayout linearLayout;
MapView mapView;
List<Overlay> mapOverlays;
Drawable drawable;
ItemizedOverlay itemizedOverlay;


public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mapviews);

        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);



        mapOverlays = mapView.getOverlays();
        drawable = this.getResources().getDrawable(R.drawable.androidmarker);
        itemizedOverlay = new ItemizedOverlay(drawable);

        Intent intent = getIntent();
        if (intent != null) {
            if (Intent.ACTION_VIEW.equals(intent.getAction())) {
                if (intent.getData() != null) {
                    int selectedPosition = Integer.parseInt(intent.getData().getHost());
                    GeoPoint point = new GeoPoint(selectedPosition, selectedPosition);

                    OverlayItem overlayitem = new OverlayItem(point, "", "");
                    itemizedOverlay.addOverlay(overlayitem);
                    mapOverlays.add(itemizedOverlay);

                    //...
                }
            }
        }

Anche le mie corde provengono da:

    <string-array name="taxi_name_array">
    <item>Barrys Taxi</item>
    <item>Boom Taxi</item>

</string-array>

<string-array name="taxi_address_array">
<item>24 test address, Uxbridge, UB8 2JY</item>
<item>14 test 2 address, Uxbridge, UB91JD</item>
</string-array>
<string-array name = "taxi_array_dist">
<item>0.4 miles</item>
<item>0.8 miles</item>
</string-array>
<string-array name ="location">
<item>(19240000,-99120000)</item>
</string-array>

Se qualcuno ha qualche idea sarebbe fantastico.

Grazie ancora a tutti

È stato utile?

Soluzione

Che cosa si può fare è utilizzare il campo dati della intento di spacciare la posizione della voce di taxi che è stato fatto clic all'attività mappa. Per fare questo, all'interno del gestore onClick per il pulsante "Map", si utilizza il costruttore Intent che prende quattro argomenti:

adb.setNeutralButton("Show Map", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("taxi:" + selectedPosition), ListTaxi.this, Map.class);
        startActivity(intent);
    }
});

Poi, all'interno della attività di carta, si chiama il getIntent metodo per recuperare la Intent che ha iniziato. Chiamando getData sulle recupera l'intento dei campi dati .

Mettere tutto insieme, si avrà qualcosa di simile a quanto segue nel Override onCreate dell'attività mappa:

Intent intent = getIntent();
if (intent != null) {
    if (Intent.ACTION_VIEW.equals(intent.getAction())) {
        if (intent.getData() != null) {
            int selectedPosition = Integer.parseInt(intent.getData().getHost());
            String[] taxiLocations = getResources().getStringArray(R.array.location);
            String location = taxiLocations[selectedPosition];
            //...
        }
    }
}

Altri suggerimenti

Vuoi dire che dispone di un indirizzo e necessario il lat / lon per impostare la mappa per? Qualcosa di simile, forse:

    Geocoder gc = new Geocoder(this.getApplicationContext()) ;
    List<Address> addresses = null ;

    try {
       addresses = gc.getFromLocationName("123 Main St, Peoria IL 61601", 10) ;
    } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
    }

    Address a = addresses.get(0) ;
    double lat = a.getLatitude() ;
    double lon = a.getLongitude() ;

    MapController mc = mapView.getController();

    p = new GeoPoint(
        (int) (lat * 1E6), 
        (int) (lon * 1E6));

    mc.animateTo(p);
    mc.setZoom(18);
    mapView.invalidate();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top