如何在 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)};