2016-03-01 158 views
2

我想创建带有卡片视图上的编辑和删除选项的弹出式菜单我已经尝试了下面的代码,但我在popup.show();处收到强制关闭,致命异常onclickimageview。我应该怎么做才能在cardview上创建弹出菜单?如何在android卡片视图中创建弹出式菜单

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

public static final String PRODUCTID = "PRODUCTID"; 
public static final String PRODUCTNAME = "PRODUCTNAME"; 

List<CustDatabaseModel> dbCustList; 
static Context context; 
public ImageView btndots; 

ShipRecyclerAdapter(Context context, List<CustDatabaseModel> dbCustList){ 
    this.dbCustList = new ArrayList<CustDatabaseModel>(); 
    this.context = context; 
    this.dbCustList = dbCustList; 

} 

@Override 
public ShipRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
      R.layout.address_list, null); 

    // create ViewHolder 

    ViewHolder viewHolder = new ViewHolder(itemLayoutView); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(ShipRecyclerAdapter.ViewHolder holder, final int position) { 

    holder.address.setText(dbCustList.get(position).getaddress()); 
    holder.city.setText(dbCustList.get(position).getcity()); 
    holder.state.setText(dbCustList.get(position).getstate()); 
    holder.zipcode.setText(dbCustList.get(position).getzip()); 

    final String adr=dbCustList.get(position).getaddress().toString(); 

    holder.btndots.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(final View v) { 
      PopupMenu popup = new PopupMenu(context, btndots); 
      //Inflating the Popup using xml file 
      popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu()); 

      popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
       public boolean onMenuItemClick(MenuItem item) { 
        Intent i; 
        if ((item.getTitle().toString()).equalsIgnoreCase("Edit")) { 
         Toast.makeText(ShipRecyclerAdapter.context, "you have clicked Menu image ", Toast.LENGTH_LONG).show(); 

        } else if ((item.getTitle().toString()).equalsIgnoreCase("Delete")) { 
         Toast.makeText(ShipRecyclerAdapter.context, "you have clicked Menu image ", Toast.LENGTH_LONG).show(); 
        } 
        return true; 
       } 
      }); 

      popup.show(); 
     } 
    }); 



    //closing the setOnClickListener method 



} 

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

public class ViewHolder extends RecyclerView.ViewHolder { 

    public TextView state,address,city,zipcode; 
    public ImageView btndots; 



    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     address = (TextView) itemLayoutView.findViewById(R.id.textViewAddress); 
     city = (TextView)itemLayoutView.findViewById(R.id.textViewCity); 
     zipcode = (TextView)itemLayoutView.findViewById(R.id.textViewZipcode); 
     state = (TextView)itemLayoutView.findViewById(R.id.textViewState); 
     this.btndots = (ImageView)itemLayoutView.findViewById(R.id.cmenu); 


    } 



} 

}`

+0

您的问题不清楚,您正在讨论弹出菜单,并显示适配器的代码。弹出式菜单 –

+0

的代码在哪里,请参阅此堆栈文档:http://stackoverflow.com/documentation/android/169/recyclerview/14542/popup-menu-with-recyclerview#t=201611030914370847887 –

回答

1

使用

registerForContextMenu(recyclerView); 

尝试在OnCreate中你的活动,你先注册上下文菜单recyclerView这个

,并创建一个像

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 
    { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Select The Action"); 
     menu.add(0, v.getId(), 0, "Call");//groupId, itemId, order, title 
     menu.add(0, v.getId(), 0, "SMS"); 
    } 
    @Override 
    public boolean onContextItemSelected(MenuItem item){ 
     if(item.getTitle()=="Call"){ 
      Toast.makeText(getApplicationContext(), "calling code", Toast.LENGTH_LONG).show(); 
     } 
     else if(item.getTitle()=="SMS"){ 
      Toast.makeText(getApplicationContext(),"sending sms code",Toast.LENGTH_LONG).show(); 
     }else{ 
      return false; 
     } 
     return true; 
    } 
上下文菜单

希望这有助于你

+0

让我知道结果 – saeed

+0

出现错误'can not resolve method'at super.onCreateContextMenu(menu,v,menuInfo); –

+0

面临同样的错误... –

6

首先建立在这样的菜单文件夹中的XML文件,

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item 
     android:id="@+id/edit" 
     android:title="@string/edit" 
     app:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/delete" 
     android:title="@string/delete" 
     app:showAsAction="ifRoom" /> 

</menu> 

然后在适配器类中创建方法,

private void showPopup(View view, final int position) { 
    // pass the imageview id 
    View menuItemView = view.findViewById(R.id.btn_song_list_more); 
    PopupMenu popup = new PopupMenu(activity, menuItemView); 
    MenuInflater inflate = popup.getMenuInflater(); 
    inflate.inflate(R.menu.popup_menu, popup.getMenu()); 
    Log.e("position -- " + position); 

    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      switch (item.getItemId()) { 
       case R.id.edit: 
        // do what you need. 
        break; 
       case R.id.delete: 
      // do what you need . 
        break; 
       default: 
        return false; 
      } 
      return false; 
     } 
    }); 
    popup.show(); 
} 

呼叫您的ImageView点击这个方法事件。