Java 将弹出菜单与RecyclerView项中的右侧对齐

Java 将弹出菜单与RecyclerView项中的右侧对齐,java,android,xml,android-recyclerview,popupmenu,Java,Android,Xml,Android Recyclerview,Popupmenu,我在我的回收视图中的每个列表项上使用弹出菜单,每当我点击我的回收视图中任何项目的溢出图标(3个点),弹出菜单就会出现在我布局的最左侧 我尝试过使用setGravity方法应用重力,但根本不起作用 但我注意到一件事,在我之前实际使用ListView而不是RecyclerView时,它工作得很好 MyAdapter代码示例: public class RecyclerAssetsAdapter extends RecyclerView.Adapter<RecyclerAssetsAdapte

我在我的
回收视图
中的每个列表项上使用
弹出菜单
,每当我点击我的
回收视图
中任何项目的溢出图标(3个点),弹出菜单就会出现在我布局的最左侧

我尝试过使用
setGravity
方法应用重力,但根本不起作用

但我注意到一件事,在我之前实际使用
ListView
而不是
RecyclerView
时,它工作得很好

MyAdapter代码示例:

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

    List<AssetsBean> assetsBeanList;
    Context context;

    public RecyclerAssetsAdapter(List<AssetsBean> assetsBeanList, Context context) {
        this.assetsBeanList = assetsBeanList;
        this.context = context;
    }

    public void filter(List<AssetsBean> newList){
        assetsBeanList = newList;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_list,viewGroup,false);
        ViewHolder vh = new ViewHolder(view);
        return vh;
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
        viewHolder.type.setText(assetsBeanList.get(i).getassetName());
        viewHolder.desc.setText(assetsBeanList.get(i).getassetDesc());
        viewHolder.building.setText(assetsBeanList.get(i).getCreatedAt());

        final ViewHolder finalViewHolder = viewHolder;
        viewHolder.overflowIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PopupMenu popupMenu = new PopupMenu(context, viewHolder.building);
                popupMenu.getMenuInflater().inflate(R.menu.assets_popup_menu,popupMenu.getMenu());
                popupMenu.setGravity(Gravity.END);
                popupMenu.setGravity(Gravity.RIGHT);
                popupMenu.show();
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()){
                            case R.id.view: //view
                                Fragment detailsFragment = new DetailsFragment();
                                Bundle args1 = new Bundle();
                                args1.putString("objectId",assetsBeanList.get(i).getObjectId());
//                                args.putString("assetType",mb.getassetName());
                                args1.putString("qrcode",assetsBeanList.get(i).getQrcode());
                                detailsFragment.setArguments(args1);
                                ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.my_fragment,detailsFragment).commit();
                                break;
                            case R.id.edit:
                                Fragment formFragment = new FormFragment();
                                Bundle args2 = new Bundle();
                                args2.putString("objectId",assetsBeanList.get(i).getObjectId());
                                formFragment.setArguments(args2);
                                ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.my_fragment,formFragment).commit();
                                break;
                            case R.id.see_logs: //see logs
                                Fragment assetsLogFragment = new AssetLogFragment();
                                Bundle args = new Bundle();
                                args.putString("objectId",assetsBeanList.get(i).getObjectId());
                                args.putString("assetType",assetsBeanList.get(i).getassetName());
                                args.putString("assetDesc",assetsBeanList.get(i).getassetDesc());
                                assetsLogFragment.setArguments(args);
                                ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.my_fragment,assetsLogFragment).commit();
                                break;
                            case R.id.move:
                                //move to new organisation
                                AlertDialog.Builder builder1 = new AlertDialog.Builder(context);
                                builder1.setTitle("Move To Department");
                                EditText editText = new EditText(context);
                                editText.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                                builder1.setView(editText);
                                builder1.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {

                                    }
                                });
//                                ParseQuery<ParseObject> assetQuery = new ParseQuery<ParseObject>("assets");
//                                assetQuery.whereEqualTo("objectId",mb.getObjectId());
//                                assetQuery.include("organization");
//                                assetQuery.findInBackground(new FindCallback<ParseObject>() {
//                                    @Override
//                                    public void done(List<ParseObject> objects, ParseException e) {
//
//                                    }
//                                });
                                break;
                            case R.id.delete: //delete assest
                                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                                builder.setTitle("Delete");
                                builder.setMessage("Are you sure you want to delete this Asset and its associated log?");
                                builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("assets");
                                        query.whereEqualTo("objectId",assetsBeanList.get(i).getObjectId());
                                        ParseQuery<ParseObject> logQuery = new ParseQuery<ParseObject>("logs");
                                        query.findInBackground(new FindCallback<ParseObject>() {
                                            @Override
                                            public void done(List<ParseObject> objects, ParseException e) {
                                                for(ParseObject object: objects){
                                                    object.deleteEventually();

                                                }
                                            }
                                        });
                                        logQuery.whereMatchesQuery("asset",query);
                                        logQuery.findInBackground(new FindCallback<ParseObject>() {
                                            @Override
                                            public void done(List<ParseObject> objects, ParseException e) {
                                                for(ParseObject object: objects){
                                                    object.deleteEventually();
                                                }
                                            }
                                        });

                                        assetsBeanList.remove(assetsBeanList.get(i));
                                        notifyDataSetChanged();
                                    }
                                });
                                builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {

                                    }
                                });
                                builder.show();
                                break;
                            default:break;
                        }
                        return true;
                    }
                });
            }
        });

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView type,desc,building;
        ImageView overflowIcon;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            type = itemView.findViewById(R.id.session_name);
            desc = itemView.findViewById(R.id.session_desc);
            building = itemView.findViewById(R.id.created_at);
            overflowIcon = itemView.findViewById(R.id.overflow_icon);
        }
    }
}
公共类RecyclerasSetAdapter扩展了RecyclerView.Adapter{
列出资产清单;
语境;
公共RecycleRassetAdapter(列表资产BeanList,上下文){
this.assetsBeanList=assetsBeanList;
this.context=上下文;
}
公共无效过滤器(列表新建列表){
assetsBeanList=newList;
notifyDataSetChanged();
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.item_list,viewGroup,false);
ViewHolder vh=新的ViewHolder(视图);
返回vh;
}
@凌驾
public void onBindViewHolder(@NonNull final ViewHolder ViewHolder,final int i){
viewHolder.type.setText(assetsBeanList.get(i.getassetName());
viewHolder.desc.setText(assetsBeanList.get(i.getassetDesc());
viewHolder.building.setText(assetsBeanList.get(i.getCreatedAt());
最终视图持有者finalViewHolder=视图持有者;
viewHolder.overflowIcon.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
PopupMenu=新的PopupMenu(上下文,viewHolder.building);
充气(R.menu.assets_popup_menu,popup menu.getMenu());
弹出菜单.setGravity(Gravity.END);
弹出菜单.setGravity(Gravity.RIGHT);
show();
setOnMenuItemClickListener(新的popupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(菜单项){
开关(item.getItemId()){
case R.id.view://view
片段detailsFragment=新的detailsFragment();
Bundle args1=新Bundle();
args1.putString(“objectId”,assetsBeanList.get(i.getObjectId());
//args.putString(“assetType”,mb.getassetName());
args1.putString(“qrcode”,assetsBeanList.get(i).getQrcode());
detailsFragment.setArguments(args1);
((AppCompatActivity)上下文).getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.my_片段,detailsFragment.commit();
打破
案例R.id.edit:
Fragment formFragment=新的formFragment();
Bundle args2=新Bundle();
args2.putString(“objectId”,assetsBeanList.get(i.getObjectId());
formFragment.setArguments(args2);
((AppCompatActivity)上下文).getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.my_fragment,formFragment).commit();
打破
案例R.id.see_logs://see logs
片段AssetLogFragment=新的AssetLogFragment();
Bundle args=新Bundle();
args.putString(“objectId”,assetsBeanList.get(i.getObjectId());
args.putString(“assetType”,AssetBeanList.get(i).getassetName());
args.putString(“assetDesc”,assetsBeanList.get(i).getassetDesc());
assetsLogFragment.setArguments(args);
((AppCompatActivity)上下文).getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.my_片段,AssetLogFragment.commit();
打破
案例R.id.move:
//迁往新机构
AlertDialog.Builder builder1=新建AlertDialog.Builder(上下文);
builder1.设置标题(“移到部门”);
EditText EditText=新的EditText(上下文);
editText.setLayoutParams(新的LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_父项,ViewGroup.LayoutParams.WRAP_内容));
builder1.setView(editText);
builder1.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
}
});
//ParseQuery assetQuery=新的ParseQuery(“资产”);
//assetQuery.whereEqualTo(“objectId”,mb.getObjectId());
//资产查询。包括(“组织”);
//assetQuery.findInBackground(新的FindCallback(){
//@覆盖
//公共void done(列出对象,parsee异常){
//
//                                    }
//                                });
打破
案例R.id.delete://删除资产
PopupMenu popupMenu = new PopupMenu(context, viewHolder.building);
PopupMenu popupMenu = new PopupMenu(context, viewHolder.overflowIcon);
PopupMenu popupMenu = new PopupMenu(context, viewHolder.overflowIcon);