Android - 单击列表视图项目时将位置固定到地图?
我有一个包含几个出租车公司的列表视图。当用户点击出租车名称时,它会显示一个警报对话框,要求他们预订、显示地图或取消。我试图实现的是,当用户单击“显示地图”时,它会从已设置的字符串数组中获取位置,然后在地图上指向它。我还不希望它找到我当前的位置。这可能吗?我已经有一个地图视图设置,目前仅指向教程中设置的随机位置。
这是我的代码:
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();
}
});
}
}
我的地图类是: /** * */ 包 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);
//...
}
}
}
我的字符串也来自:
<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>
如果有人有任何想法,那就太棒了。
再次感谢大家
I have a listview that contains a couple of taxi companies. When a user clicks on the taxi name, it shows an alertdialog box asking them to either book, show map or cancel. What im trying to achieve is when the user clicks show map, it grabs the location from a string array already set, and then points to it on the map. I dont want it to find my current location as of yet. is this possible to do? i already have a mapview setup which at present just points to a random location set from the tutorial.
This is my code for both:
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();
}
});
}
}
and my map class is :
/**
*
*/
package 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);
//...
}
}
}
Also my strings come from :
<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>
If anyone has any ideas that would be awesome.
Thanks again everyone
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以做的是使用意图的数据字段将单击的出租车项目的位置传递给地图活动。为此,在“地图”按钮的
onClick
处理程序内,使用带有四个参数的Intent
构造函数:然后,在地图活动内,调用 < href="http://developer.android.com/reference/android/app/Activity.html#getIntent%28%29" rel="nofollow">
getIntent
方法检索启动它的Intent
。调用getData
在意图上检索数据字段。将所有内容放在一起,您将在地图活动的
onCreate
重写中看到如下内容:What you can do is use the data field of the intent to pass the position of the taxi item that was clicked to the map activity. To do this, inside the
onClick
handler for the "Map" button, you use theIntent
constructor that takes four arguments:Then, inside the map activity, you call the
getIntent
method to retrieve theIntent
that started it. CallinggetData
on the intent retrieves the data field.Putting it all together, you will have something like the following in the
onCreate
override of the map activity:您的意思是您有一个地址并且需要纬度/经度来设置地图?也许是这样的:
You mean you have an address and need the lat/lon to set the map to? Something like this perhaps: