Fixes the crash in the Android TComboBox dialog

git-svn-id: trunk@35653 -
This commit is contained in:
sekelsenmat 2012-03-02 14:06:25 +00:00
parent 4d20dae129
commit 9fc9951724
2 changed files with 32 additions and 25 deletions

View File

@ -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

View File

@ -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');