0

をマッピングするためにマーカーを追加する意図ロングクリックを通過し、私は私のために仕事をするのonCreateメインクラスで次のように、私はclicklistenerと長いlicklistenerを設定しますリストビューを持っていた:RecyclerViewのOnClickが最初

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent i = new Intent(getApplicationContext(), UserFeed.class); 
      i.putExtra("venueName", businessList.get(position).name); 
      i.putExtra("companyId",businessList.get(position).id); 
      i.putExtra("canWrite", checkedIn); 
      i.putExtra("Lat",businessList.get(position).anchorpt.getLatitude()); 
      i.putExtra("Lon",businessList.get(position).anchorpt.getLongitude()); 
      i.putExtra("NotType",venueType); 
      startActivity(i); 

     } 
    }); 

    listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long l) { 
      Double Lat = businessList.get(position).anchorpt.getLatitude(); 
      Double Lon = businessList.get(position).anchorpt.getLongitude(); 
      ArrayList<Marker> markers = new ArrayList<>(); 
      LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
      mMap.clear(); 
      markers.add(mMap.addMarker(new MarkerOptions().position(new LatLng(point.getLatitude(), point.getLongitude())) 
        .icon(BitmapDescriptorFactory.defaultMarker()) 
        .title("My Location") 
        .visible(false))); 
      markers.add(mMap.addMarker(new MarkerOptions().position(new LatLng(Lat, Lon)) 
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)) 
        .visible(true))); 

      for (Marker marker : markers){ 
       builder.include(marker.getPosition()); 
      } 
      LatLngBounds bounds = builder.build(); 
      int padding = 100; 
      CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds,padding); 
      mMap.animateCamera(cu); 
      return true; 
     } 
    }); 

I私は、リサイクラービューで同じアプローチをしようとしているが、成功していない。私はrecylcerviewadapterでそれを行うことができますが、どのようにマーカーを追加するのか分かりません。

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{ 
    public TextView tvName,tvDistance,tvAgeRange,tvUserCount,tvGenderRatio,tvTimeDetails; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     itemView.setOnClickListener(this); 
     //itemView.setOnLongClickListener(this); 

     tvName = (TextView) itemView.findViewById(R.id.venueName); 
     tvDistance = (TextView) itemView.findViewById(R.id.textDistance); 
     tvAgeRange = (TextView) itemView.findViewById(R.id.textAgeRange); 
     tvUserCount = (TextView) itemView.findViewById(R.id.textUserCount); 
     tvGenderRatio = (TextView) itemView.findViewById(R.id.textGenderRatio); 
     tvTimeDetails = (TextView) itemView.findViewById(R.id.whenLitOccurs); 
    } 


    @Override 
    public void onClick(View view) { 
     //context.startActivity(new Intent(context, UserFeed.class)); 
     int row = getAdapterPosition(); 
     Log.i("AppInfo","Item clicked"+ items.get(row)); 
     Intent i = new Intent(context, UserFeed.class); 
     i.putExtra("venueName", items.get(row).name); 
     i.putExtra("companyId",items.get(row).id); 
     //i.putExtra("canWrite", checkedIn); 
     i.putExtra("Lat",items.get(row).anchorpt.getLatitude()); 
     i.putExtra("Lon",items.get(row).anchorpt.getLongitude()); 
     //i.putExtra("NotType",venueType); 
     context.startActivity(i); 

    } 

    @Override 
    public boolean onLongClick(View view) { 
     //Add a marker to map 
     return true; 
    } 
} 

私はgoogle maps v2を使用しています。 clickListenerためのインタフェースを作成します。

ステップ1をmainactivityし、クリックしてlongclickイベントを転送する:(インタフェースEX)

+0

いただきました問題にそれで 'onLongClick'を実装していますか? – pskink

+0

申し訳ありませんが、私はそれをうまく言わなかったかもしれませんが。私がやろうとしているのは、定期的なリストビューと同じように、 "ほとんど"リサイクルビューのonclick&onlonglcickリスナーを追加することです。アダプターのビューホルダーサブクラスではなく、メインクラスのonCreateメソッドを使用します。私がすると、それはクリックを検出しません –

+0

あなたは 'itemView.setOnClickListener(this);を呼び出しているので、それは動作します – pskink

答えて

1

は、コールバックメソッドを使用する代わりに、アダプタ内部の任意の激しい操作を行ういけません。

public interface CustomAdapterClickListener { 
public void onItemClick(View v, int position);} 

手順2:mainActivityのreffrenceを、recylcerviewのコンストラクタの助けを借りてインターフェイスに割り当てます。

public class RecylcerAdapter extends extends RecyclerView.Adapter<>{ 
public RecylcerAdapter(Context context, ArrayList<> list, 
         final CustomAdapterClickListener clickListener) { 

    this.context = context; 
    inflator = LayoutInflater.from(context); 
    this.list = list; 
    this.clickListener = clickListener; 
} 

}ステップ3:アダプタ

のonClicks方法から、このインターフェース方法
@Override 
public void onClick(View v) { 
    clickListener.onItemClick(v,(int)v.getTag()); 
} 

ステップ4コール:MainActivity

public class MaiActivity extends AppCompatActivity implements CustomAdapterClickListener{ 

@Override 
public void onItemClick(View v, int position) { 
    // now you have the list item position as well as view , get the adapter data based on the postion 
    // add marker with the help of googlemap instance .() 
} 

}にインターフェースを実装

+0

その外観はどうですか?どのように地図に適用できますか? –

+0

私は自分の答えを更新しましたか、チェックしてください –

+0

これを長いクリックにも適用できますか? –

関連する問題