mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-13 05:29:26 +02:00
Fixes the crash in the Android TComboBox dialog
git-svn-id: trunk@35653 -
This commit is contained in:
parent
4d20dae129
commit
9fc9951724
@ -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
|
||||
|
@ -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, '<init>', '(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');
|
||||
|
Loading…
Reference in New Issue
Block a user