diff --git a/examples/androidlcl/android/src/com/pascal/lcltest/LCLActivity.java b/examples/androidlcl/android/src/com/pascal/lcltest/LCLActivity.java index b1f338961a..c603287948 100755 --- a/examples/androidlcl/android/src/com/pascal/lcltest/LCLActivity.java +++ b/examples/androidlcl/android/src/com/pascal/lcltest/LCLActivity.java @@ -228,16 +228,6 @@ public class LCLActivity extends Activity implements SensorEventListener, Locati lclxdpi = (int) metrics.xdpi; lclydpi = (int) metrics.ydpi; LCLOnCreate(this); - - // Prepare dialog callbacks - // for TCDComboBox - lclselectitemcallback = new DialogInterface.OnClickListener() - { - @Override public void onClick(DialogInterface dialog, int which) - { - LCLOnMessageBoxFinished(which, 1); - } - }; } @Override public void onConfigurationChanged (Configuration newConfig) @@ -584,6 +574,22 @@ public class LCLActivity extends Activity implements SensorEventListener, Locati } } + // Prepare dialog callbacks + // for TCDComboBox + public void LCLDoPrepareSelectItemDialog(CharSequence[] items, int selected, AlertDialog.Builder dialog) + { + //Log.i("lclapp", "LCLDoPrepareSelectItemDialog"); + dialog.setSingleChoiceItems(items, selected, new DialogInterface.OnClickListener() + { + @Override public void onClick(DialogInterface dialog, int which) + { + //Log.i("lclapp", "LCLDoPrepareSelectItemDialog.onClick"); + LCLOnMessageBoxFinished(which, 1); + dialog.dismiss(); + } + }); + } + // ------------------------------------------- // Fields exported to the Pascal side for easier data communication // ------------------------------------------- @@ -623,9 +629,6 @@ public class LCLActivity extends Activity implements SensorEventListener, Locati public String lcldestination; public int lclkind; - // Dialog callbacks - DialogInterface.OnClickListener lclselectitemcallback; - static { try diff --git a/lcl/interfaces/customdrawn/customdrawnlclintf_android.inc b/lcl/interfaces/customdrawn/customdrawnlclintf_android.inc index 77f64e4745..f9089af9e8 100644 --- a/lcl/interfaces/customdrawn/customdrawnlclintf_android.inc +++ b/lcl/interfaces/customdrawn/customdrawnlclintf_android.inc @@ -278,9 +278,9 @@ function TCDWidgetset.ShowSelectItemDialog(const AItems: TStrings): Boolean; var javaAndroidAppAlertDialogBuilderClass: JClass = nil; javaCharSequence: JClass = nil; - javaMethod_AlertDialogBuilder_new, javaMethod_AlertDialogBuilder_setSingleChoiceItems, + javaMethod_AlertDialogBuilder_new, javaMethod_AlertDialogBuilder_show: JMethodID; - JavaField_lclselectitemcallback: JFieldID; + JavaMethod_LCLDoPrepareSelectItemDialog: JMethodID; javaAlertDialog: JObject; javaObjectArray: JObjectArray; // array for the parameters @@ -292,12 +292,11 @@ begin // First get the classes javaAndroidAppAlertDialogBuilderClass := javaEnvRef^^.FindClass(javaEnvRef, 'android/app/AlertDialog$Builder'); - javaCharSequence := javaEnvRef^^.FindClass(javaEnvRef, 'java/lang/CharSequence'); + javaCharSequence := javaEnvRef^^.FindClass(javaEnvRef, 'java/lang/String');//'java/lang/CharSequence'); //__android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] 2 javaAndroidAppAlertDialogBuilderClass='+IntToStr(PtrInt(javaAndroidAppAlertDialogBuilderClass)))); // final AlertDialog.Builder ad = new AlertDialog.Builder(this); javaMethod_AlertDialogBuilder_new := javaEnvRef^^.GetMethodID(javaEnvRef, javaAndroidAppAlertDialogBuilderClass, '', '(Landroid/content/Context;)V'); - //__android_log_write(ANDROID_LOG_INFO, 'lclapp', '[TCDWidgetset.ShowSelectItemDialog] 2,5'); lParams[0].l := javaActivityObject; javaAlertDialog := javaEnvRef^^.NewObjectA(javaEnvRef, javaAndroidAppAlertDialogBuilderClass, javaMethod_AlertDialogBuilder_new, @lParams[0]); //__android_log_write(ANDROID_LOG_INFO, 'lclapp', '[TCDWidgetset.ShowSelectItemDialog] 3'); @@ -305,24 +304,29 @@ begin // ad.setSingleChoiceItems( adapter, -1, MyOnClickListener); // DialogInterface.OnClickListener lclselectitemcallback; // public AlertDialog.Builder setSingleChoiceItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener) - JavaField_lclselectitemcallback := javaEnvRef^^.GetFieldID(javaEnvRef, javaActivityClass, 'lclselectitemcallback', 'Landroid/content/DialogInterface$OnClickListener;'); - javaMethod_AlertDialogBuilder_setSingleChoiceItems := javaEnvRef^^.GetMethodID(javaEnvRef, javaAndroidAppAlertDialogBuilderClass, 'setSingleChoiceItems', - '([Ljava/lang/CharSequence;ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;'); - javaObjectArray := javaEnvRef^^.NewObjectArray(javaEnvRef, AItems.Count, javaCharSequence, nil); + JavaMethod_LCLDoPrepareSelectItemDialog := javaEnvRef^^.GetMethodID(javaEnvRef, javaActivityClass, 'LCLDoPrepareSelectItemDialog', + '([Ljava/lang/CharSequence;ILandroid/app/AlertDialog$Builder;)V'); + javaObjectArray := javaEnvRef^^.NewObjectArray(javaEnvRef, AItems.Count, javaCharSequence, javaEnvRef^^.NewStringUTF(javaEnvRef, '')); lParams[0].l := javaObjectArray; - //__android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] javaObjectArray='+IntToStr(PtrInt(javaObjectArray)))); for i := 0 to AItems.Count-1 do begin lJavaString :=javaEnvRef^^.NewStringUTF(javaEnvRef, PChar(AItems.Strings[i])); javaEnvRef^^.SetObjectArrayElement(javaEnvRef, javaObjectArray, i, lJavaString); - __android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] Adding string='+AItems.Strings[i])); + __android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] Adding string='+AItems.Strings[i]+' lJavaString='+IntToStr(PtrInt(lJavaString)))); end; lParams[1].i := -1; - lParams[2].l := javaEnvRef^^.GetObjectField(javaEnvRef, javaActivityClass, JavaField_lclselectitemcallback); - javaEnvRef^^.CallObjectMethodA(javaEnvRef, javaAlertDialog, javaMethod_AlertDialogBuilder_setSingleChoiceItems, @lParams[0]); + lParams[2].l := javaAlertDialog; +{ __android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] JavaMethod_LCLDoPrepareSelectItemDialog='+IntToStr(PtrInt(JavaMethod_LCLDoPrepareSelectItemDialog)))); + __android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] lParams[0].l='+IntToStr(PtrInt(lParams[0].l)))); + __android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] lParams[1].i='+IntToStr(lParams[1].i))); + __android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] lParams[2].l='+IntToStr(PtrInt(lParams[2].l)))); + __android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar('[TCDWidgetset.ShowSelectItemDialog] javaActivityClass='+IntToStr(PtrInt(javaActivityClass))));} + javaEnvRef^^.CallVoidMethodA(javaEnvRef, javaActivityObject, JavaMethod_LCLDoPrepareSelectItemDialog, @lParams[0]); // ad.show(); +// __android_log_write(ANDROID_LOG_INFO, 'lclapp', '[TCDWidgetset.ShowSelectItemDialog] 4'); javaMethod_AlertDialogBuilder_show := javaEnvRef^^.GetMethodID(javaEnvRef, javaAndroidAppAlertDialogBuilderClass, 'show', '()Landroid/app/AlertDialog;'); +// __android_log_write(ANDROID_LOG_INFO, 'lclapp', '[TCDWidgetset.ShowSelectItemDialog] 5'); javaEnvRef^^.CallObjectMethod(javaEnvRef, javaAlertDialog, javaMethod_AlertDialogBuilder_show); __android_log_write(ANDROID_LOG_INFO, 'lclapp', '[TCDWidgetset.ShowSelectItemDialog] END');