[fpc-pascal] ppcjvm issues
Jon Foster
jon-lists at jfpossibilities.com
Tue Jan 10 06:05:57 CET 2017
On 01/08/2017 02:57 AM, Sven Barth wrote:
> On 07.01.2017 03:12, Jon Foster wrote:
>> I've been working on building an app for Android using the FPC's JVM
>> target. I'm using fpc 3.0.0. I've run into a couple of things that I'm
>> not sure if they're bugs or I just don't know what I'm doing. I was
>> using fpc to avoid having to learn Java and have discovered that's not
>> entirely possible. :-/
>>
>> The first issue I ran into is this:
>>
>> procedure Cppp1Activity.onResume;
>> begin
>> inherited onResume;
>> with AAAlertDialog.InnerBuilder(self) do begin
>> setTitle(R.strings.app_name);
>> end;
>> end;
>>
>> Cppp1Activity is a descendant of AAActivity. I'm overriding the onResume
>> method. The problem I ran into was with the AAAlertDialog.InnerBuilder
>> class. I can create an object of that class without incident. However if
>> I try to call any of the methods (tried several) I get a "Class Cast"
>> exception reported in the Android log and the app goes *poof*. I also
>> tried just chaining the call like
>> "AAAlertDialog.InnerBuilder(self).setTitle(R.strings.app_name);", and I
>> tried this in the "Activity.onCreate" method with the same result. And
>> yes "R.strings.app_name" points to an actual resource and I generated a
>> "resources.pas" with the "R" class fresh for this test.
> Here's what I had done in my Android application way back at Christmas
> 2011 (
> http://lists.lazarus-ide.org/pipermail/lazarus/2011-December/134414.html ):
>
> === code begin ===
>
> function TTrainTypeActivity.onCreateDialog(aID: jint): AADialog;
> var
> builder: AAAlertDialog.InnerBuilder;
> begin
> case aID of
> DialogIDDelete: begin
> builder := AAAlertDialog.InnerBuilder.Create(Self);
>
> builder.setMessage(JLString('Are you sure you want to delete train ' +
> 'type ''' + fDataHelper.NameOfTrainType[fSelectedID] + '''?'));
>
> builder.setPositiveButton(JLString('Yes'), Self);
> builder.setNegativeButton(JLString('No'), Self);
>
> Result := builder.create_;
> end;
> else
> Result := Nil;
> end;
> end;
>
> === code end ===
>
> I know it's onCreateDialog() and not onResume(), but it should be the
> same principle.
>
> Though doesn't an activity itself already have a setTitle() method? At
> least that's what I had used in my onCreate()...
>
> Regards,
> Sven
>
Yes, same principal. Since this is a one time in the lifetime of the app
use dialog I didn't see the point of building it into the onCreateDialog()
/ onPrepareDialog() methods. Its going to be shown the first time someone
launches my app and then never seen again unless uninstalled / reinstalled,
data erased, installed on another device, ...
What I don't quite get from your example is using "self" as the second
argument to setPositiveButton() & setNegativeButton. That parameter is
asking for an OnClickListener() class. When I tried that I received a
compile time error as I expected.
Yes, the AAActivity class has a "setTitle()" method. However it sets the
title for the activity. Where as the AAAlertDialog.InnnerBuilder.setTitle()
method sets a title on the dialog window. I actually decided I like it
better without, but I'm still experimenting.
THX - Jon
--
Jon Foster
JF Possibilities, Inc.
More information about the fpc-pascal
mailing list