好的,这就是我所拥有的。
Button anandabutton = (Button) findViewById(R.id.anandaAddressButton);
anandabutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(),MapClass.class);
startActivityForResult(myIntent,0);
}
});
这个方法打开了我的MapClass类,目前我已经设置了显示一个地方的位置。
但是我有一大堆按钮,而不是为每个按钮制作很多不同的mapClass类,我想知道我可以只使用一个类,并根据按下'id'按钮,它会检查一个' if语句'然后将正确的坐标放入方法中以显示地图。这比编写20-30个课程要简洁得多。
我不确定我是否已经解释了这一点,如果不让我知道的话。
感谢您的帮助。
这是我的地图课......
public class MapClass extends MapActivity {
MapView mapView;
MapController mc;
GeoPoint p;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
int button = getIntent().getExtras().getInt("button", -1);
switch(button){
case DundrumSelector.BUTTON1:
handleCoordinates("53.288719","-6.241179");
break;
case DundrumSelector.BUTTON2:
handleCoordinates("53.288719","-6.241179");
break;
}
}
private void handleCoordinates(String l, String b){
mapView = (MapView) findViewById(R.id.mapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
View zoomView = mapView.getZoomControls();
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
mc = mapView.getController();
String coordinates[] = {l, b};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat*1E6),
(int) (lng*1E6));
mc.animateTo(p);
mc.setZoom(17);
mapView.invalidate();
}
然后我的其他活动是
public static final int BUTTON1 = R.id.anandaAddressButton;
Button anandabutton = (Button) findViewById(R.id.anandaAddressButton);
anandabutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(),MapClass.class);
myIntent.putExtra("button", BUTTON1);
startActivityForResult(myIntent,0);
}
});
出于某种原因,当我尝试点击列表中除BUTTON1以外的任何其他项目时程序崩溃。我不得不拿出BUTTON2,BUTTON3等,因为如果我尝试进入他们的视野,它就会不断崩溃。但是当我注释掉这个onClick方法时,它们都可以正常工作吗?
你们中的任何一个人都有任何野心吗?你了解我的问题吗? 感谢。
答案 0 :(得分:1)
如果我理解正确,你想要始终启动相同的Intent,但是在intent的接收器端,即启动的活动,你想根据按下的按钮使用不同的方法。 / p>
我建议to add a constant to the Intent取决于您按下的按钮,并在MapClass中检查它是哪个常数,然后根据这样做做出反应:
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(),MapClass.class);
myIntent.putExtra("button", BUTTON1);
startActivityForResult(myIntent,0);
}
BUTTON1和BUTTON2是常量int,您在Acitivty类中定义的对应于您要添加的按钮。
在onCreate()方法的MapClass中,执行以下操作:
int button = getIntent().getExtras().getIntExtra("button", -1);
switch(button) {
case BUTTON1:
//do something
break;
case BUTTON2:
//do method for button 2
break;
default:
//do another thing
break;
}
还要涵盖您的修改:
如果只有坐标改变了,我会做点什么:
int button = getIntent().getExtras().getIntExtra("button", -1);
switch(button) {
case BUTTON1:
handleCoordinates("53.288719","-6.241179");
break;
case BUTTON2:
handleCoordinates("23.288719","23.241179"
break;
default:
//do another thing
break;
}
private void handleCoordinates(String l, String b) {
mapView = (MapView) findViewById(R.id.mapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
View zoomView = mapView.getZoomControls();
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
mc = mapView.getController();
String coordinates[] = {l, b};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat*1E6),
(int) (lng*1E6));
mc.animateTo(p);
mc.setZoom(17);
mapView.invalidate();
}
答案 1 :(得分:1)
为了补充Sebi的答案以及您在评论中提出的问题,您要做的是创建一个处理程序(可能在您的onCreate()方法中):
OnClickListener buttonListener = new OnClickListener(){
public void onClick(View v) {
if(!(v instanceof Button))
//throw error, not supposed to happen
Button b = (Button)v;
int id = b.getId();
int code; //used to know when your activity comes back (if you need to)
int lat;
int long;
switch(id) {
case button1.getId():
//set code, lat and long for button1
case button2.getId():
//set code, lat and long for button2
...
}
Bundle bdl = new Bundle();
bdl.putDouble("latitude", lat);
bdl.putDouble("longitude", long);
Intent myIntent = new Intent(view.getContext(),MapClass.class);
myIntent.putExtras(bdl);
startActivityForResult(myIntent,code);
}
button1.setOnClickListener(buttonListener);
button2.setOnClickListener(buttonListener);
...