nav-title | title | description | position |
---|---|---|---|
Gotchas |
Gotchas |
NativeScript Android Runtime Extend Limitations |
4 |
As explained in How Extend Works, everytime you inherit from a class or implement an interface, the Runtime generates a new class. By default you don't have to specify a class name and NativeScript will pick one for you. This, however, has some important implications.
Let's have a look the following code fragment:
function buttonFactory() {
var MyButton = new android.widget.Button.extend({
setEnabled: function(enabled) {
// do something
}
});
}
Java classes must have unique names. And because the extend
function generates a new class each time when is called, the second time you call the buttonFactory
function it will throw an error. In this example the error message is:
Extend name android_widget_button_mainpage_l10_c20 already used
The message tells us that we are trying to generate a class with an already existing name. It also gives us an important information - the file (mainpage.js), the line (10) and the column (20) number where the extend
call is made.
Having in mind the full extend syntax, we can take advantage of the first parameter to specify a unique class name each time when extend
is called. The updated code would look like the following:
function buttonFactory(className) {
var MyButton = new android.widget.Button.extend(className, {
setEnabled: function(enabled) {
// do something
}
});
};
var className = getUniqueClassName(...);
var newButton = buttonFactory(className);
Note: Ideally, you will use extend only when needed, once per the <file, line number, column number> combination.