Question

J'ai un ListView qui contient deux compagnies de taxi. Lorsqu'un utilisateur clique sur le nom de taxi, il montre une boîte AlertDialog leur demandant soit livre, afficher la carte ou annuler. Qu'est-ce que im essayant d'atteindre est lorsque l'utilisateur clique afficher la carte, il saisit l'emplacement d'un tableau de chaînes déjà défini, et signale ensuite sur la carte. Je ne veux pas qu'il trouve mon emplacement actuel pour l'instant. Est-ce possible? J'ai déjà une configuration MapView qui à l'heure actuelle juste des points à un emplacement aléatoire mis à partir du tutoriel.

Ceci est mon code pour:

    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();
         }
     });     
}

}

et ma classe de carte est:                 / **  *  * / com.taxime de colis;

    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);

                    //...
                }
            }
        }

Aussi mes chaînes proviennent de:

    <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>

Si quelqu'un a des idées qui serait génial.

Merci encore à tous

Était-ce utile?

La solution

Ce que vous pouvez faire est d'utiliser le champ de l'intention de passer la position de l'élément de taxi qui a été cliqué à l'activité de carte de données. Pour ce faire, dans le gestionnaire de onClick pour le bouton « Carte », vous utilisez le constructeur de Intent qui prend quatre arguments:

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);
    }
});

Ensuite, à l'intérieur de l'activité de la carte, vous appelez la méthode getIntent pour récupérer le Intent qui a commencé. Appel getData sur l'intention récupère le champ de données .

Mettre tous ensemble, vous aurez quelque chose comme ce qui suit dans le remplacement de onCreate de l'activité carte:

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];
            //...
        }
    }
}

Autres conseils

Vous voulez dire que vous avez une adresse et le besoin de latitude / longitude pour définir la carte pour? Quelque chose comme cela peut-être:

    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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top