2016-07-24 21 views
0

Ich versuche, eine Notizen App zu machen, und ich habe bereits die Artikel (Notizen) im Recycler aufgeführt werden. Es gibt ein ImageButton auf jedem der Elemente und ich möchte ein PopUpMenu erscheinen, sobald es angeklickt wird.Android RecyclerView Adapter Popup-Menü funktioniert nicht

Es ist möglich, auf die imageButton für einzelne Elemente zu klicken, aber ich kann nicht das popUpMenu für jedes einzelne Element angezeigt werden.

Wenn es eine bessere oder alternative Möglichkeit gibt, wäre das auch toll.

Artikel 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> 

Recycler Adapter (nRecyclerAdapter.java) PopupMenu CODE IST HIER:

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 Klasse (noteClickListener.java):

import android.view.View; 

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

Antwort

1

Sie müssen einige /res/menu/popupmenu.xml erstellen:

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

Dann unter Ihrem Linie PopupMenu popupMenu = new PopupMenu(context,holder.optionBtn); müssen Sie das Menü mit popupMenu.inflate(R.menu.popupmenu);

aufblasen
Verwandte Themen