2016-12-22 14 views
0

ポップアップメニューを押したときに現在のrecyclerviewアイテムの位置を取得することはできませんが、それはできません。ポップアップメニューのリサイクルビューメソッドonBindViewHolder

holder.buttonViewOption.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      //creating a popup menu 
      PopupMenu popup = new PopupMenu(mCtx, holder.buttonViewOption); 
      //inflating menu from xml resource 
      popup.inflate(R.menu.options_menu); 
      //adding click listener 
      popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
       @Override 
       public boolean onMenuItemClick(MenuItem item) { 
        switch (item.getItemId()) { 
         case R.id.menu1: 

          MyLis item =list.get(onBindViewHolder(getItemViewType(position)));      
       Intent i = new Intent(mCtx, NewClass.class); 
      i.putExtra("name",item .getName()); 
       mContext.startActivity(i); 

          break; 
         case R.id.menu2: 
          //handle menu2 click 
          break; 
         case R.id.menu3: 
          //handle menu3 click 
          break; 
        } 
        return false; 
       } 
      }); 
      //displaying the popup 
      popup.show(); 

     } 
    }); 

コード全体CustomAdapter.javaです:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> { 

private List<MyList> list; 
private Context mCtx; 

public CustomAdapter(List<MyList> list, Context mCtx) { 
    this.list = list; 
    this.mCtx = mCtx; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.list_items, parent, false); 
    return new ViewHolder(v); 
} 

@Override 
public void onBindViewHolder(final CustomAdapter.ViewHolder holder, int position) { 
    MyList myList = list.get(position); 
    holder.textViewHead.setText(myList.getHead()); 
    holder.textViewDesc.setText(myList.getDesc()); 

    holder.buttonViewOption.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      //creating a popup menu 
      PopupMenu popup = new PopupMenu(mCtx, holder.buttonViewOption); 
      //inflating menu from xml resource 
      popup.inflate(R.menu.options_menu); 
      //adding click listener 
      popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
       @Override 
       public boolean onMenuItemClick(MenuItem item) { 
        switch (item.getItemId()) { 
         case R.id.menu1: 

          MyLis item =list.get(onBindViewHolder(getItemViewType(position)));      
       Intent i = new Intent(mCtx, NewClass.class); 
      i.putExtra("name",item .getName()); 
       mContext.startActivity(i); 

          break; 
         case R.id.menu2: 
          //handle menu2 click 
          break; 
         case R.id.menu3: 
          //handle menu3 click 
          break; 
        } 
        return false; 
       } 
      }); 
      //displaying the popup 
      popup.show(); 

     } 
    }); 
} 
+0

MyList item = list.get(position);あなたはこれを試しましたか? –

+0

@Rajeshはい、 'positon'はエラーをマークします。原因はこのポップアップメニューのメソッドではなくonBindViewHolderメソッド – user3518835

+0

で' View.OnClickListener'をあなたの 'RecyclerView.ViewHolder'に実装しています(クラスFooはRecyclerView.ViewHolderを継承しています)。 .OnClickListene {...) – pskink

答えて

0

ちょうどあなたがこのをdecalreたとき、あなたはもうMyLis item =list.get(onBindViewHolder(getItemViewType(position)));を必要としないこの

case R.id.menu1: 
    Intent i = new Intent(mCtx, NewClass.class); 
    i.putExtra("name", myList.getName()); 
    mContext.startActivity(i); 
    break; 

を置き換えますBindViewHoldeeの先頭

+0

ありがとう、私の男@Rajesh、それは働いた。もし私が会うなら、私はあなたのためにビール1本を買うことができます。 hhhh歓声 – user3518835

+0

@ user3518835ハッピーコーディング:) –