首先,这已经证明是一个相当长的帖子,所以请耐心等待,因为它不太难,但如果我没有正确解释,你可能需要向我澄清一些事情。 所以在前一天这个论坛上有人帮忙,我设法部分设置了我的'mapClass'类,但是我遇到了麻烦而且运行不正常所以我想要一些帮助,如果可能的话。我将发布以下代码,以便您查看。
我得到的是一个'Dundrum'类,它为一系列项目设置了listView。
然后我有一个'dundrumSelector'类,我用它来设置listItems上的setOnClickListener()方法并将它们链接到正确的视图。
这是我的DUNDDRUM SELECTOR CLASS ....
public static final int BUTTON1 = R.id.anandaAddressButton;
public static final int BUTTON2 = R.id.bramblesCafeAddressButton;
public static final int BUTTON3 = R.id.brannigansAddressButton;
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);
int position = getIntent().getExtras().getInt("position");
if(position == 0){
setContentView(R.layout.ananda);
};
if(position == 1){
setContentView(R.layout.bramblescafe);
};
if(position == 2){
setContentView(R.layout.brannigans);
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);
}
});
Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);
bramblesbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(),MapClass.class);
myIntent.putExtra("button", BUTTON2);
startActivityForResult(myIntent, 0);
}
});
等等......
然后我做的是设置静态int来表示你可以在这个类的顶部看到的按钮,原因是因为在我的mapClass活动中我只想要一个方法,因为唯一的事情是不同的是每个位置的坐标。 即。我不希望100多个地图类基本上做同样的事情而不是方法中的不同坐标。
所以我的地图类如下......
case DundrumSelector.BUTTON1:
handleCoordinates("53.288719","-6.241179");
break;
case DundrumSelector.BUTTON2:
handleCoordinates("53.288719","-6.241179");
break;
case DundrumSelector.BUTTON3:
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();
}
现在这就是我的问题所在。 onClick()事件甚至无法从listView中运行以进入正确的视图。在我进入他们的观点之前,我必须在“DundrumSelector”中注释掉这些方法。
这是我不理解的,首先是为什么onClick()事件不起作用,因为它甚至不在地图所在的下一个视图上。
我知道这是一个很长的帖子,可能会让人很困惑,所以如果你想要澄清,请告诉我。
回顾一下,我想要做的只是设置一个设置地图坐标的类,就像我在'mapClass'中尝试做的那样。
请有人帮忙或建议另一种方法! 非常感谢大家阅读本文。
答案 0 :(得分:0)
问题如下:
Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);
bramblesbutton.setOnClickListener(new View.OnClickListener() {
在这里,您尝试将onClickListener设置为一个按钮,该按钮仅在您处于位置2并且已调用正确的setContentView()方法时才可用。如果您有另一个视图作为内容(不包含您的按钮),那么
Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);
将返回null,并在下一行中出现NullPointerException。因此,如果您还使用相应的布局,则必须仅添加此onClickListener。
是的,如果你将它注释掉它是有效的,因为那样你就不会尝试在null上调用一个方法。但另一方面,如果你发表评论,那么它就不会注册你的点击,因此不会继续。
让它更清晰:
当您的传递位置为0时,您正在设置此ContentView:
if(position == 0){
setContentView(R.layout.ananda);
};
因此我假设其他两个按钮不在此布局中,因此为它们分配ClickListener将抛出NullPointerException。
要解决这个问题,如果你真的需要这3种不同的布局,我会这样做(第一个按钮的例子):
if(position == 0){
setContentView(R.layout.ananda);
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);
}
});
}