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);