android:double onclicklistener退出

时间:2018-04-22 21:29:17

标签: android

我正在编写一个应用程序,其中我有一个地图,其中包含用户放下的标记 我想到了这种删除用户不想要的标记的方法:首先点击一个图标,然后点击标记,标记就会被删除。我遇到的问题是,在初始点击图标后,所有标记都会在点击时被删除。我需要一种摆脱OnClickListener的方法。我试过return;,但它没有用。

      mDelete = view.findViewById(R.id.Im_delete);
      mDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG, "onClick: clicked Delete icon");
            deleteMarker();
            return;
            }
       });
       private void deleteMarker(){
    Toast.makeText(getActivity(), "Click a marker to delete it", Toast.LENGTH_SHORT).show();
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            marker.remove();
            return false;
        }
    });

}

1 个答案:

答案 0 :(得分:2)

您的文字说明不太清楚,但请指出我认为您可以做的一些更改:

  1. 在公共布尔值onMarkerClick(标记标记)上,一旦删除标记,就应该返回true以避免默认行为。

  2. 我认为您应该在方法deleteMarker之外添加setOnMarkerClickListener,并且为了避免用户在单击时删除标记,您可以使用布尔标记(mDeleteMode)。

  3. 使用mDeleteMode标志,当用户点击mDelete时将其设置为true,并将其设置为false,例如,a)用户删除标记,b)外部点击或c)再次点击mDelete

  4. 
    public class yourClass {

        private boolean mDeleteMode = false;
    
        protected void yourMethod(View view...) {
            mDelete = view.findViewById(R.id.Im_delete);
            mDelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d(TAG, "onClick: clicked Delete icon");
                    Toast.makeText(getActivity(), 
                        "Click a marker to delete it", 
                         Toast.LENGTH_SHORT).show();
                    mDeleteMode = true;
                }
            });
    
            mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                @Override
                public boolean onMarkerClick(Marker marker) {
                    if (mDeleteMode) {
                        mDeleteMode = false;
                        marker.remove();
                        return true;
                    }
                    return false;
                }
            });
        }    
    }