2017-05-16 9 views
0

NativeScriptの世界では、AndroidのTextViewを拡張するJSファイルを作成し、それを既存のAndroidプロジェクトからネイティブに呼び出すことはできますか?NativeScriptでJSを使用してカスタムクラスを作成し、ネイティブAndroidで使用

例えば、私はandroid.widget.TextViewを拡張し、このカスタムのTextView派生:

var constructorCalled = false; 
var CustomTextView = android.widget.TextView.extend({ 
    //constructor 
    init: function() { 
     constructorCalled = true; 
     this.setText("set in javascript"); 
    }, 
}); 

を、今私が呼び出すことによって、このクラスを使用しよう:

CustomTextView customTextView = new CustomTextView(); 

をネイティブのAndroidプロジェクトに。

注:私はこの文書を検討してきました: https://docs.nativescript.org/angular/integration-with-existing-ios-and-android-apps/extend-existing-android-app-with-ns-angular2.html 、それが働いていただが、私はJSでカスタムクラスを構築する方法を理解し、Javaが自由にそれを使用持っているため、この例では十分ではありません。

+1

を - '拡張の最初のパラメータとしてあなたの拡張クラスの固定名を与えます'呼び出し、そうすれば、匿名で生成された新しいクラスの名前が何であるか不思議に思うことがないように、Javaコードでより簡単に到達することができます。たとえば、 'com.Arzath​​.custom.CustomTextView'を渡すと、Javaで構築するオブジェクトになります。 https://docs.nativescript.org/runtimes/android/generator/extend-class-interface https://docs.nativescript.org/runtimes/android/generator/how-extend-works.html#the-classname-パラメータ – pkanev

答えて

0

pkanevのおかげで、あなたは正しい方向を指摘しました! だから私はそうのように私のJSが定義されたクラスに変更:私は、このコマンドを使用して、私のAndroidプラットフォームを再構築

var constructorCalled = false; 
var CustomTextView = android.widget.TextView.extend(
    "com.Arzath.custom.CustomTextView", 
    { 
    //constructor 
    init: function() { 
     constructorCalled = true; 
     this.setText("set in javascript"); 
    }, 
    }); 

次へ:

tns build android 

私のsrcフォルダに私のJavaクラス、CustomTextViewを与えること。

それはそれを使用するためには、そのようなランタイムを開始することを忘れないでくださいことに注意することが重要です。一般的な推奨事項として

com.tns.Runtime runtime = com.tns.RuntimeHelper.initRuntime(MainActivity.this.getApplication()); 
     if (runtime != null) { 
      runtime.run(); 

     } 
関連する問題