2014-10-30 38 views
0

我在地图上工作我创建了一个地图屏幕并使用marker.markers创建了Info Window Adapter的帮助。在信息窗口适配器我有textview名称,卷号和地址我想设置点击事件的名称,地址。你能告诉我这是怎么做到的。如何在InfoWindowAdapter中设置点击事件

package com.ihealthhome.ui; 
import java.util.Hashtable; 
import android.app.Activity; 
import android.content.Context; 
import android.text.TextUtils; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.android.gms.maps.GoogleMap.InfoWindowAdapter; 
import com.google.android.gms.maps.model.Marker; 
import com.ihealthhome.R; 
import com.ihealthhome.dataparser.ClientsDetailDAO; 
import com.ihealthhome.listeners.ClientDetailNavigationListener; 

/** 
* @author DotZoo Inc, created on 02-Jan-2014 
*/ 
public class CustomInfoWindowAdapter implements InfoWindowAdapter { 

    private View view; 
    Context ctx; 
    private Hashtable<String, ClientsDetailDAO> renderMarker; 

    public CustomInfoWindowAdapter(Context ctx, 
      Hashtable<String, ClientsDetailDAO> markers) { 
     this.ctx = ctx; 
     this.renderMarker = markers; 
     view = ((Activity) ctx).getLayoutInflater().inflate(
       R.layout.custom_infowindow, null); 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 
     return null; 
    } 

    @Override 
    public View getInfoWindow(Marker marker) { 

     final ImageView profileImage = (ImageView) view 
       .findViewById(R.id.userProfile); 
     TextView clientName = ((TextView) view.findViewById(R.id.clientName)); 
     final TextView clientCellPhone = ((TextView) view 
       .findViewById(R.id.clientCellPhone)); 
     final TextView clientHomePhone = ((TextView) view 
       .findViewById(R.id.clientHomePhone)); 
     final TextView clientWorkPhone = ((TextView) view 
       .findViewById(R.id.clientWorkPhone)); 
     final TextView clientDashboard = ((TextView) view 
       .findViewById(R.id.clientDashboard)); 

     final ClientsDetailDAO info = renderMarker.get(marker.getId()); 

     String firstName = info.getFirstName(); 
     String lastname = info.getLastName(); 
     if (!TextUtils.isEmpty(firstName) && !TextUtils.isEmpty(lastname)) { 
      clientName.setText(new StringBuilder(firstName).append(" ").append(
        lastname)); 
     } 

     String cellPhone = info.getCellPhone(); 
     if (cellPhone != null && !TextUtils.isEmpty(cellPhone)) { 
      clientCellPhone.setText(cellPhone); 
     } 

     String homePhone = info.getHomePhone(); 
     if (homePhone != null && !TextUtils.isEmpty(homePhone)) { 
      clientHomePhone.setText(homePhone); 
     } 

     String workPhone = info.getWorkPhone(); 
     if (workPhone != null && !TextUtils.isEmpty(workPhone)) { 
      clientWorkPhone.setText(workPhone); 
     } 

     clientName.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Toast.makeText(ctx, "on click", Toast.LENGTH_LONG).show(); 
       mClientDetailListener.gotoClientDetail(info.getClientID(), 
         info.getFirstName()); 

      } 
     }); 

     return view; 
    } 

    ClientDetailNavigationListener mClientDetailListener; 

    public void setNavigateToClientDetailListener(
      ClientDetailNavigationListener mClientDetailListener) { 
     this.mClientDetailListener = mClientDetailListener; 
    } 
} 
+0

尝试将每个视图单击侦听器实现为clientName。 – 2014-10-30 10:33:43

+0

你能解释一下吗? – aditay 2014-10-30 10:39:07

+0

当你点击到名字不等时,你想做什么? – 2014-10-30 10:56:17

回答

0

试试这种方式,希望这会帮助你解决你的问题。

您必须将setOnTouchListener与自定义触控侦听器配合使用。

public abstract class OnInfoWindowElemTouchListener implements OnTouchListener { 
    private final View view; 
    private final Handler handler = new Handler(); 

    private Marker marker; 
    private boolean pressed = false; 

    public OnInfoWindowElemTouchListener(View view) { 
     this.view = view; 
    } 

    public void setMarker(Marker marker) { 
     this.marker = marker; 
    } 

    @Override 
    public boolean onTouch(View vv, MotionEvent event) { 
     if (0 <= event.getX() && event.getX() <= view.getWidth() && 
      0 <= event.getY() && event.getY() <= view.getHeight()) 
     { 
      switch (event.getActionMasked()) { 
      case MotionEvent.ACTION_DOWN: startPress(); break; 

      // We need to delay releasing of the view a little so it shows the pressed state on the screen 
      case MotionEvent.ACTION_UP: handler.postDelayed(confirmClickRunnable, 150); break; 

      case MotionEvent.ACTION_CANCEL: endPress(); break; 
      default: break; 
      } 
     } 
     else { 
      // If the touch goes outside of the view's area 
      // (like when moving finger out of the pressed button) 
      // just release the press 
      endPress(); 
     } 
     return false; 
    } 

    private void startPress() { 
     if (!pressed) { 
      pressed = true; 
      handler.removeCallbacks(confirmClickRunnable); 
      if (marker != null) 
       marker.showInfoWindow(); 
     } 
    } 

    private boolean endPress() { 
     if (pressed) { 
      this.pressed = false; 
      handler.removeCallbacks(confirmClickRunnable); 
      if (marker != null) 
       marker.showInfoWindow(); 
      return true; 
     } 
     else 
      return false; 
    } 

    private final Runnable confirmClickRunnable = new Runnable() { 
     public void run() { 
      if (endPress()) { 
       onClickConfirmed(view, marker); 
      } 
     } 
    }; 

    /** 
    * This is called after a successful click 
    */ 
    protected abstract void onClickConfirmed(View v, Marker marker); 
} 

clientName.setOnTouchListener(new OnInfoWindowElemTouchListener() { 
    @Override 
    protected void onClickConfirmed(View v, Marker marker) { 
     Toast.makeText(ctx, "on click", Toast.LENGTH_LONG).show();       
     mClientDetailListener.gotoClientDetail(info.getClientID(),info.getFirstName()); 
    } 
}); 
+0

感谢兄弟我尝试 – aditay 2014-10-30 12:12:07

+0

现在检查我更新的答案。 – 2014-10-30 12:16:37

相关问题