OnClickListener无法使用谷歌地图片段顶部的按钮

时间:2013-11-02 15:04:04

标签: java android android-fragments google-maps-android-api-2 onclicklistener

我试图让一个按钮在SupportMapFragment之上工作,但是OnclickListener没有触发。 这是我的代码:

MapFragment:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle     savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    setRetainInstance(true);
    SP = getActivity().getSharedPreferences(SHARED_PREFS_NAME, 0);
    this.SP.registerOnSharedPreferenceChangeListener(this);
    View view = inflater.inflate(R.layout.map, container, false);

    FrameLayout frameLayout = new FrameLayout(getActivity());
    frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent));
    ((ViewGroup) view).addView(frameLayout, new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));

    setHasOptionsMenu(true);
    tracker = GoogleAnalyticsTracker.getInstance();
    setMapTransparent((ViewGroup) view);
    String mapType = SP.getString("PREF_MAP", "MAP_TYPE_NORMAL");

    FragmentManager myFragmentManager = getFragmentManager();
    SupportMapFragment mySupportMapFragment = (SupportMapFragment) myFragmentManager.findFragmentById(R.id.map);
    myMap = mySupportMapFragment.getMap();
    if (mapType.equals("MAP_TYPE_NORMAL")) {
        myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    } else if (mapType.equals("MAP_TYPE_SATELLITE")) {
        myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
    } else if (mapType.equals("MAP_TYPE_HYBRID")) {
        myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    }
    myMap.setMyLocationEnabled(true);
    myMap.setOnMapClickListener(this);
    myMap.setOnMapLongClickListener(this);
    myMap.getUiSettings().setZoomControlsEnabled(true);
    myMap.getUiSettings().setMyLocationButtonEnabled(true);
    myMap.getUiSettings().setScrollGesturesEnabled(true);
    myMap.getUiSettings().setZoomGesturesEnabled(true);
    ((Activity) getActivity()).setSupportProgressBarIndeterminateVisibility(false);

    button = (Button) view.findViewById(R.id.sbutton);
    this.button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(getActivity(), "CLICK!", Toast.LENGTH_SHORT).show();

        }

    });

    return view;
}

map.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:holo="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Main"
 >

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"
    />

<Button
    android:id="@+id/sbutton"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:gravity="center_horizontal|center_vertical"           
    android:background="@drawable/ic_social_share_light"
         />

不知道为什么不工作。 有人可以看看代码并告诉我我做错了吗?

由于

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。 我已经将onClick添加到我的map.xml上的按钮,而不是使用MapFragment中的代码,我使用了MapActivity中的代码,如下所示。 这样我的按钮工作正常。

Map.xml

android:onClick="sButton"

MapActivity

public void sButton(View v) {
    Toast.makeText(this, "CLICK!", Toast.LENGTH_SHORT).show();
}

答案 1 :(得分:0)

您正在顶部添加framelayout。删除它:

FrameLayout frameLayout = new FrameLayout(getActivity());
    frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent));
    ((ViewGroup) view).addView(frameLayout, new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,
        LayoutParams.MATCH_PARENT));

setMapTransparent((ViewGroup) view);