您好,我有以下代码:
view.setOnLongClickListener((viewL) -> {
final CharSequence[] optionsDialog = {"Edit", "Delete"};
((MainActivity) context).myDialog.setSingleChoiceItems(optionsDialog, 0,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(i==0){
final Intent myIntent = new Intent (context, MainInputActivity.class);
myIntent.putExtra("request", 8);
myIntent.putExtra("oldTask", mySubTask.getSubTaskText());
myIntent.putExtra("taskCode", mySubTask.getSubtaskCode());
((MainActivity) context).startActivityForResult(myIntent, 8);
dialogInterface.dismiss();
}
if(i==1){
realm.executeTransaction((realm) -> mySubTask.deleteSubtask());
realm.refresh();
notifyDataSetChanged();
((MainActivity) context).updateWidgets();
dialogInterface.dismiss();
}
}
});
所以这里我有一个 SAM 表达式,在里面我也想将 ((MainActivity) context).myDialog.setSingleChoiceItems
写成 lambda。问题是 setSingleChoiceItems
有 3 个参数,我不知道如何将代码 fragment 转换为 lambda。有可能吗?根据我的 IDE,这就是我问这个问题的原因。
最佳答案
假设 DialogInterface.OnClickListener
是一个功能接口(interface)(即只有一个抽象方法):
view.setOnLongClickListener((viewL) -> {
final CharSequence[] optionsDialog = {"Edit", "Delete"};
((MainActivity) context).myDialog.setSingleChoiceItems(optionsDialog, 0,
(DialogInterface dialogInterface, int i) -> {
if(i==0){
final Intent myIntent = new Intent (context, MainInputActivity.class);
myIntent.putExtra("request", 8);
myIntent.putExtra("oldTask", mySubTask.getSubTaskText());
myIntent.putExtra("taskCode", mySubTask.getSubtaskCode());
((MainActivity) context).startActivityForResult(myIntent, 8);
dialogInterface.dismiss();
}
if(i==1){
realm.executeTransaction((realm) -> mySubTask.deleteSubtask());
realm.refresh();
notifyDataSetChanged();
((MainActivity) context).updateWidgets();
dialogInterface.dismiss();
}
});
});
请注意,只有 setSingleChoiceItems
的最后一个参数被转换为 lambda 表达式。
关于java - 如何在 Java8 中处理带有 3 个参数的 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585184/