- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的 NativeScript 项目中,我想包含来自 Android 支持库的 RecyclerView
。我将依赖项包含在 app/App_Resources/Android/app.gradle
中:
// Uncomment to add recyclerview-v7 dependency
dependencies {
compile 'com.android.support:recyclerview-v7:+'
}
来自 git issue#2295和其他相关问题,我读到可以包含 tns-platform-declarations
以提供原生 android/ios 库的定义文件。所以我安装了它们并关注了tns platform declarations documentation
我想编译以下示例 fragment :
import { ContentView } from "ui/content-view";
declare var android: any;
export class OptimizedListView extends ContentView {
private _android: android.support.v7.widget.RecyclerView;
public _createUI() {
this._android = new android.support.v7.widget.RecyclerView(this._context);
}
};
像上面那样声明 var android
会清除 RecyclerView
的第二个引用。但是 RecyclerView 的 top reference 上仍然存在以下错误:
message: 'Namespace 'android.support.v7.widget' has no exported member 'RecyclerView'.'
我也尝试过声明 RecyclerView 类但没有成功:
export declare class RecyclerView extends ContentView {}
我知道,tns-platform-declarations
在 android.support.v7.widget
之前都有定义。
将“noEmitOnError”设置为 false 的解决方法感觉不对。
那么我如何将此声明扩展到 android.support.v7.widget.RecyclerView
而不会出现编译问题?
版本:
最佳答案
最后我没有去 tns-platform-declarations
完全没有,因为性能非常糟糕(特别是如果您的开发机器中有 <= 8GB RAM)。
我的解决方案是定义一个自己的 my-typings.d.ts
文件(例如在项目根目录中),我在其中定义了扩充类型 RecyclerView
.与 tsconfig.json
默认它应该被 tsc
自动捕获.否则exclude
/include
, 或 files
可以添加表达式。
然后你可以放置一个/// <reference path="path/to/RecyclerView/file.d.ts" />
在里面,所以下面的ambient global namespace
可以通过 Typescript 编译器找到。
declare namespace android {
namespace view {
namespace ViewGroup {
namespace LayoutParams {
const MATCH_PARENT;
const WRAP_CONTENT;
}
}
class ViewGroup {
}
}
namespace support.v7.widget {
namespace RecyclerView {
type AdapterImpl = {
onCreateViewHolder(parent: android.view.ViewGroup, viewType: number): ViewHolder;
onBindViewHolder(holder: android.support.v7.widget.RecyclerView.ViewHolder, position: number): void;
getItemCount(): number
};
class Adapter {
static extend(AdapterImpl): { new () }
}
class LayoutParams {
constructor(width: any, height: any);
}
class ViewHolder {
static extend: any;
}
}
class RecyclerView {
constructor(context: any);
setAdapter(Adapter): void;
setLayoutManager(LinearLayoutManager): void;
}
class LinearLayoutManager {
constructor(context: any);
}
}
}
基本上,命名空间可用于模拟嵌套对象属性(例如 android.view.xxx
)。如果内部类是用 Java 定义的,这也是这种方式(Typescript 似乎禁止嵌套 class
语句)。
在实际使用类型的情况下,我还必须定义一个与 namespace 同名的类(如 android.view.ViewGroup
中)。否则你会得到上面的错误
no exported member xxx
,即使类类型显式声明为 export
(这不是必需的,因为您已经全局声明了命名空间)。
对于使用 extend
扩展 native Java 类型的特殊情况,我为相关类定义了一个静态方法,如 static extend(AdapterImpl): { new () }
,其返回类型可以用 new
实例化.
希望这对其他有类似问题的人有所帮助。
关于android - NativeScript:扩充 tns-platform-declarations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40702610/
我正在尝试填充一个 ListView ,其中每一行都有 2 个 TextView 和一个按钮。我想我几乎让它正常工作,但现在 ListView 只显示 ListView 中的 1 个项目并忽略其他数据
是否可以通过向 DOM 元素添加新属性来扩充普通 JavaScript 对象?例如,我们能否为按钮或输入添加一个新属性,比如一个指示用户最后一次点击它的时间的值? 最佳答案 是的。有时您会发现它被描述
我的要求是能够快速检索树中的最小值和最大值。 (注意,不是最小/最大 key ,而是卫星数据的最小/最大)。 树将基于字符串作为键,每个节点将存储一个整数。这个整数必然会改变并不断更新。键保持固定 我
我正在浏览 Introduction to Algorithms by Cormen第 14 章(增强数据结构),他在其中谈论区间树。下面是他提到的区间树背后的设计方法。 Step 1: Underl
我知道如何为每个对象添加新方法 - 通过扩充对象的原型(prototype): Object.prototype.foo = function() { }; 但是,是否可以只为 DOM 元素节点定义
我正在开发一个已经在 Kaggle 实现的项目这与图像分类有关。我总共有 6 个类别要预测,分别是愤怒、快乐、悲伤等。我已经实现了 CNN 模型,目前仅使用 4 个类别(图像数量最多的类别),但我的模
在我的 NativeScript 项目中,我想包含来自 Android 支持库的 RecyclerView。我将依赖项包含在 app/App_Resources/Android/app.gradle
我正在创建一个使用 twitter api 的应用程序。 我正在检索推文并向用户展示。 在某些情况下,推文有链接,如下图所示。 阅读 twitter 的 api 文档,我发现了一个叫做“增强 URL
我正在阅读JavaScript the good parts这本书,看到了以下代码: Function.prototype.method = function (name, func) { this
我有一个按钮 View 。我是否必须将它包装在 Layout 中以便能够在 Activity 中膨胀它的实例? View 是否有类似的模式,以便我可以声明性地设置一次,然后创建它的多个实例? 谢谢。
我在数据库的 BLOB 字段中有一个 zip 流。我正在尝试给它充气,但到目前为止还做不到。 问题是这个流是一个压缩流,而不是一个完整的压缩文件。 如果清楚的话,这将是对其进行膨胀的 Java 代码:
我是一名优秀的程序员,十分优秀!