как передать указатель на функцию как аргумент java android
есть функция в android java показывающая интерактивное диалоговое окно, очень хочется передать ей через аргумент функции которые будут вызываться при нажатии на кнопки Yes, No, Dismiss, чтобы сделать ее универсальной а не переписывать каждый раз. Извините,в java новичок, мыслю категориями Си.Подскажите как это сделать
public int DialogMakeChose(String txtMsg1, String txtMsg2, ***p* funcYes***) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
LayoutInflater li = LayoutInflater.from(this);
View dialog1View = li.inflate(R.layout.dialog1, null);
TextView textViewDlg1 = dialog1View.findViewById(R.id.textViewD1);
TextView textViewDlg2 = dialog1View.findViewById(R.id.textViewD2);
textViewDlg1.setText(txtMsg1);
textViewDlg2.setText(txtMsg2);
builder.setView(dialog1View);
//builder.setTitle(Title)
//.setMessage(txtMsg)
// .setMessage("Are you sure, you want to continue ?")
//.setCancelable(false)
builder .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
***funcYes****
chose = 1;
setMinSizePicture();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
chose = 0;
}
})
.setOnDismissListener(new DialogInterface.OnDismissListener(){
@Override
public void onDismiss(DialogInterface dialog) {showSizePicture(); }
});
// setOnCancelListener(new DialogInterface.OnCancelListener() {
// @Override
// public void onCancel(DialogInterface dialog) { showSizePicture(); }
//Creating dialog box
AlertDialog dialog = builder.create();
dialog.show();
return chose;
}
Ответы (3 шт):
Могу предложить создать функцию Yes в твоем главном классе активности public class *** extends AppCompatActivity, тогда ты сможешь обратиться к ней по названию из любого места в классе. Должно сработать в твоем случае, потому что лично я как такой же новичок не сталкивался с тем, что я вынужден выходить за пределы главного класса.
Я у себя сделал так:
private void createTwoButtonsAlertDialog(String title, String content, String base) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(title);
builder.setMessage(content);
builder.setNegativeButton(R.string.NO,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setPositiveButton(R.string.Yes,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (base.equals("fuel") | (base.equals("all"))) {
// 1 вариант
}
if (base.equals("stat") | (base.equals("all"))) {
// 2 вариант
}
if (base.equals("auto") | (base.equals("all"))) {
// 3 вариант
}
}
});
builder.show();
}
Вызов такой:
createTwoButtonsAlertDialog("ServiceNote", "Удалить базу?", "stat");
Вы можете в качестве аргумента передать что угодно
Спасибо всем кто откликнулся! Нашел ответ на этом сайте: https://ru.stackoverflow.com/a/680707/433160 реально работает! Упрощает код и делает его более читабельным)
class Operarray {
public static void f() {
System.out.println("123");
}
private static void func(Runnable f1) {
f1.run();
}
public static void main(String[] args) {
func(Operarray::f);
}
}