2016-06-28 9 views
2

私はRecyclerViewを持っています。これは、RecyclerView ItemのonLongCLickイベントが発生したときに起動されるContextMenuを実装しています。しかし、私はContextMenuonMenuItemClick(MenuItem item)の内部に作成されたRecyclerViewアイテムの位置を取得するのは大変です。私のアダプタクラスの内部コンテキストメニューからRecyclerViewアイテムに関する情報を取得する方法

コード:

public static class PlaceViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener,MenuItem.OnMenuItemClickListener { 
     protected TextView vName; 
     protected TextView vDes; 
     protected ImageView vBanner; 
     CheckPlacesFragment fragmentCtx; 
     ArrayList<UserPlaces> places = new ArrayList<UserPlaces>(); 
     Context ctx; 
     UserPlaces place; 

     public PlaceViewHolder(View v, Context ctx, ArrayList<UserPlaces> places, CheckPlacesFragment fragmentCtx) { 
      super(v); 
      v.setOnClickListener(this); 
      v.setOnCreateContextMenuListener(this); 
      this.places = places; 
      this.ctx = ctx; 
      this.fragmentCtx = fragmentCtx; 
      vName = (TextView) v.findViewById(R.id.place_name); 
      vDes = (TextView) v.findViewById(R.id.place_des); 
      vBanner = (ImageView) v.findViewById(R.id.banner_img); 


     } 

     @Override 
     public void onClick(View v) { 
      int position = getAdapterPosition(); 
      place = this.places.get(position); 
      Toast.makeText(this.ctx,place.getName(),Toast.LENGTH_SHORT).show(); 


     } 


     @Override 
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
      MenuItem deleteAction = menu.add("Delete"); 
      deleteAction.setOnMenuItemClickListener(this); 
     } 

     @Override 
     public boolean onMenuItemClick(MenuItem item) { 

      // int id = item.getItemId(); 
      // ERROR : How to get item position which ContextMenu Created 
      switch (id) { 
       case 0 : 
        //Call delete Function from Fragment 
        fragmentCtx.test(pid); 
        return true; 
       case 1: 

        return true; 

      } 
      return false; 
     } 
    } 

答えて

3

public boolean onMenuItemClick(MenuItem item) { 

    int id = item.getItemId(); 
    int recyclerId = getLayoutPosition(); 
    place = this.places.get(recyclerId); 
    String pid=place.getId(); 
    switch (id) { 
     case 0 : 
      //Call delete Function from Fragment 
      fragmentCtx.test(pid); 
      return true; 
     case 1: 

      return true; 

    } 
    return false; 
} 
であなたの onMenuItemClick()を交換してください
2

あなたはViewHolderの機能getLayoutPosition()を試すことができます。

関連する問題