【问题标题】:Android: who can help me with setting up this google maps class please?Android:谁能帮我设置这个谷歌地图类?
【发布时间】:2023-03-19 21:49:01
【问题描述】:

首先,这是一个相当长的帖子,所以请耐心等待,因为它并不太难,但如果我没有正确解释,您可能需要与我澄清一些事情。 因此,前几天在这个论坛上的一些人的帮助下,我设法部分设置了我的“mapClass”类,但我遇到了麻烦,它运行不正确,所以如果可能的话,我希望得到一些帮助。我将在下面发布代码,以便您查看。

我得到的是一个“Dundrum”类,它为一组项目设置 listView。

然后我得到了一个 'dundrumSelector' 类,我用它在 listItems 上设置 setOnClickListener() 方法并将它们链接到正确的视图。

这是我的 DUNDDRUM SELECTOR 类....

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

});

等等等等……

然后我所做的是设置静态整数来表示您可以在此类顶部看到的按钮,原因是因为在我的 mapClass 活动中我只想拥有一个方法,因为唯一可以不同的是每个位置的坐标。 IE。我不想让 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”中想要做的那样。

请有人帮助或建议另一种方法! 非常感谢大家阅读本文。

【问题讨论】:

  • 你能发布整个课程吗?或者更好地定义哪个代码在哪个类中?另外什么完全不起作用? onClick() 方法永远不会被调用?你在做什么使它工作?注释掉 DrumDrumSelector??注释掉是什么意思?全班代码?
  • 嘿 Sebi,如果我将 onClickListeners() 编码到类中,那么我无法单击 listView 中的任何项目。它只是出现一个错误,说“程序已经崩溃等等。”所以我必须注释掉(//)我为每个按钮设置的 onClickListeners,这样就解决了问题。出于某种原因,它不喜欢他们在那里?但我需要这些方法,这样我就可以使用我的 mapClass 了。它们是每个视图中的按钮,单击时会将我带到 mapView。对不起,如果我不善于解释,你明白我吗?如果您需要更多信息,请告诉我。 TY

标签: android google-maps listview button listviewitem


【解决方案1】:

问题如下:

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

【讨论】:

  • 对不起。在混淆评论、答案和编辑时遇到了一些问题.. sry 不知道发生了什么;)
  • 啊,好吧,我明白了。对了,你的专家意见对我来说是什么?感谢您澄清错误:)
  • 好酷是的,我真的需要这个工作。所以你在那里做的那个方法会在我的dundrumSelector中,你似乎只是把内容视图和onClickListener放在一个?上面我有2个单独的是吗?最后一件事你说我需要 3 种不同的布局?我没有在上面看到你的例子中有 3 个布局?到目前为止感谢 sebi
  • 您通过调用 setContenView() 三次来使用三种不同的布局。是的,只需将整个 onClickListener 内容放在相应的 if 正文中即可。顺便说一句...只是我这边的一个善意建议:看来您是 Android(和 Java?)的初学者,因此,如果您首先尝试遵循简单的教程等来习惯这些东西,我会更好
  • 好的,谢谢老兄。是的,我主要是 android 的初学者,但我需要为一个项目做这些事情,你看,所以我有点紧张哈!非常感谢,我会告诉你我的进展情况!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2022-01-21
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多