2016-07-24 28 views
0

私はメモアプリを作ろうとしていて、リサイクラーにリストされるアイテム(ノート)を既に持っています。各項目にImageButtonがあり、クリックするとpopUpMenuが表示されます。Android recyclerViewアダプターポップアップメニューが機能しない

個々のアイテムのimageButtonをクリックすることはできますが、個々のアイテムごとにpopUpMenuを表示することはできません。

優れているか代替方法があれば、それも素晴らしいでしょう。

アイテムXML(row_notes.xml):

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    card_view:cardCornerRadius="2dp" 
    card_view:cardElevation="0dp" 
    android:clickable="true" 
    android:layout_margin="5dp"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_weight="1" 
      android:background="@drawable/note_shape" 
      android:padding="3dp"> 

      <TextView 
       android:textColor="@color/primaryText" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Note" 
       android:id="@+id/rowNoteTitle" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentLeft="true" 
       android:paddingLeft="10dp" 
       android:textSize="20dp" 
       android:layout_gravity="top|left|center_vertical" 
       android:layout_marginTop="2dp" /> 

      <ImageButton 
       android:layout_width="20dp" 
       android:layout_height="match_parent" 
       android:id="@+id/rowNoteBtn" 
       android:layout_gravity="right|center_vertical" 
       android:background="@drawable/img_btn_shape" 
       android:src="@drawable/ic_dots_vertical_white_24dp" /> 

      <TextView 
       android:textColor="@color/secondaryText" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Note amount" 
       android:id="@+id/rowNoteAmount" 
       android:layout_alignParentTop="true" 
       android:textSize="12dp" 
       android:layout_gravity="left|bottom" 
       android:layout_marginLeft="20dp" 
       android:layout_marginTop="7dp" /> 

     </FrameLayout> 

     <ProgressBar 
      style="?android:attr/progressBarStyleHorizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="5dp" 
      android:id="@+id/progressBar" 
      android:max="100" 
      android:progressDrawable="@drawable/progress_color" 
      android:background="#ffffff" /> 

    </LinearLayout> 

リサイクラアダプタ(nRecyclerAdapter.java)POPUPMENU CODEここに:

public class nRecyclerAdapter extends RecyclerView.Adapter<nViewHolder> { 

private Context context; 
private ArrayList<Note> notes; 

public nRecyclerAdapter(Context context, ArrayList<Note> notes) { 
    this.context = context; 
    this.notes = notes; 
} 

@Override 
public nViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_notes, parent, false); 
    nViewHolder holder = new nViewHolder(v); 

    return holder; 
} 

@Override 
public void onBindViewHolder(final nViewHolder holder, final int position) { 

    holder.noteTitle.setText(notes.get(position).getNoteTitle()); 
    holder.noteAmount.setText(notes.get(position).getNoteAmount()); 

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

      //Toast.makeText(context, notes.get(position).getNoteTitle()+" click button works",Toast.LENGTH_SHORT).show(); 
      PopupMenu popupMenu = new PopupMenu(context,holder.optionBtn); 
      popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
       @Override 
       public boolean onMenuItemClick(MenuItem menuItem) { 
        String option = menuItem.getTitle().toString(); 
        Toast.makeText(context, notes.get(position).getNoteTitle(),Toast.LENGTH_SHORT).show(); 
        if(option.matches("Edit")){ 
         Toast.makeText(context, notes.get(position).getNoteTitle()+" Edit",Toast.LENGTH_SHORT).show(); 
        }else if(option.matches("Delete")){ 
         Toast.makeText(context, notes.get(position).getNoteTitle()+" Delete",Toast.LENGTH_SHORT).show(); 
        } 
        return true; 
       } 
      }); 
      popupMenu.show(); 
     } 
    }); 

    //listener 
    holder.setItemClickListener(new noteClickListener() { 
     @Override 
     public void onNoteItemClick(View v, int position) { 
      Toast.makeText(context, notes.get(position).getNoteTitle(),Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return notes.size(); 
} 

public void updateData(ArrayList<Note> mNotes){ 
    notes.clear(); 
    notes.addAll(mNotes); 
    notifyDataSetChanged(); 
} 

public void addItem(String title, String amount){ 
    notes.add(new Note(title,amount)); 
    notifyDataSetChanged(); 
} 

public void removeItem(int position){ 
    notes.remove(position); 
    notifyDataSetChanged(); 
} 

}

ViewHolder(nViewHolder .java):

public class nViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {  

TextView noteTitle; 
TextView noteAmount; 
noteClickListener noteClickListener; 
ImageButton optionBtn; 

public nViewHolder(View itemView) { 
    super(itemView); 

    optionBtn = (ImageButton) itemView.findViewById(R.id.rowNoteBtn); 
    noteTitle = (TextView) itemView.findViewById(R.id.rowNoteTitle); 
    noteAmount = (TextView) itemView.findViewById(R.id.rowNoteAmount); 

    optionBtn.setOnClickListener(this); 
    itemView.setOnClickListener(this); 
} 

public void setItemClickListener(noteClickListener nc){ 
    this.noteClickListener = nc; 
} 

@Override 
public void onClick(View view) { 
    this.noteClickListener.onNoteItemClick(view,getLayoutPosition()); 
} 

}

onClickListenerクラス(noteClickListener.java):

import android.view.View; 

public interface noteClickListener { 
    void onNoteItemClick(View v, int position); 
} 

答えて

1

あなたは、いくつかの/res/menu/popupmenu.xml作成する必要があります。あなたの下に、次に

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:title="Menu Item" /> 
</menu> 

PopupMenu popupMenu = new PopupMenu(context,holder.optionBtn);のメニューを展開する必要があります。popupMenu.inflate(R.menu.popupmenu);

関連する問題