如何在 Android 中实现方法而不是回调?
How to impelement method in Android instead callback?
例如
binding.more.setOnClickListener(view -> {
PopupMenu popupMenu = new PopupMenu(context,view);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,view);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
});
我想将代码更改为
binding.more.setOnClickListener(setPopupMenu(position,view));
和setPopupMenu();会像
private View.OnClickListener setPopupMenu(int position) {
PopupMenu popupMenu = new PopupMenu(context,v);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,v);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
}
我尝试制作方法,但我不知道如何获取视图
你可以在 setPopupMenu(int position, View view) 方法中像传递视图一样将位置作为参数传递
private void setPopupMenu(int position, View v) {
PopupMenu popupMenu = new PopupMenu(context,v);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,v);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
}
And call the method using binding with help of lambda like below:
//calling setOnClickListener using lambda function
binding.more.setOnClickListener {view -> setPopupMenu(position, view)};
例如
binding.more.setOnClickListener(view -> {
PopupMenu popupMenu = new PopupMenu(context,view);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,view);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
});
我想将代码更改为
binding.more.setOnClickListener(setPopupMenu(position,view));
和setPopupMenu();会像
private View.OnClickListener setPopupMenu(int position) {
PopupMenu popupMenu = new PopupMenu(context,v);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,v);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
}
我尝试制作方法,但我不知道如何获取视图
你可以在 setPopupMenu(int position, View view) 方法中像传递视图一样将位置作为参数传递
private void setPopupMenu(int position, View v) {
PopupMenu popupMenu = new PopupMenu(context,v);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,v);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
}
And call the method using binding with help of lambda like below:
//calling setOnClickListener using lambda function
binding.more.setOnClickListener {view -> setPopupMenu(position, view)};