如何在android卡片视图中创建弹出式菜单
我想创建带有卡片视图上的编辑和删除选项的弹出式菜单我已经尝试了下面的代码,但我在popup.show();
处收到强制关闭,致命异常onclick
的imageview
。我应该怎么做才能在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);
}
}
}`
使用
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;
}
上下文菜单
希望这有助于你
让我知道结果 – saeed
出现错误'can not resolve method'at super.onCreateContextMenu(menu,v,menuInfo); –
面临同样的错误... –
首先建立在这样的菜单文件夹中的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点击这个方法事件。
您的问题不清楚,您正在讨论弹出菜单,并显示适配器的代码。弹出式菜单 –
的代码在哪里,请参阅此堆栈文档:http://stackoverflow.com/documentation/android/169/recyclerview/14542/popup-menu-with-recyclerview#t=201611030914370847887 –