这是使用的示例Android Support Library V7 RecyclerView。通常建议使用支持库,因为它们提供了新功能的向后兼容版本,提供了框架中未包含的有用的UI元素,并提供了可用于应用程序的一系列实用程序。
要获取RecyclerView,我们将安装必要的Nuget软件包。首先,我们将搜索v7 recyclerview。向下滚动直到看到Xamarin Android Support Library - v7 RecyclerView。选择它,然后单击“添加软件包”。
或者,Android Support Library V7 RecyclerView可以作为Xamarin组件使用。为了添加组件,请Components在Solution Explorer中的Android项目中右键单击,然后单击Get More Components。
在出现的“组件存储”窗口中,搜索RecyclerView。在搜索列表中,选择Android Support Library V7 RecyclerView。然后点击Add to App。组件被添加到项目中。
下一步是将RecyclerView添加到页面。在axml(布局)文件中,我们可以添加RecyclerView如下内容。
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent" />
对于基本的标准实现,RecyclerView至少需要设置两个帮助器类:Adapter和ViewHolder。Adapter放大项目布局并将数据绑定到RecyclerView中显示的视图。ViewHolder查找并存储视图引用。视图持有者还有助于检测项目视图的点击。
这是适配器类的基本示例
public class MyAdapter : RecyclerView.Adapter { string [] items; public MyAdapter (string [] data) { items = data; } // 创建新视图(由布局管理器调用) public overrideRecyclerView.ViewHolderOnCreateViewHolder (ViewGroup parent, int viewType) { // 设置视图的大小,边距,填充和布局参数 var tv = new TextView (parent.Context); tv.SetWidth(200); tv.Text= ""; var vh = new MyViewHolder (tv); return vh; } // 替换视图的内容(由布局管理器调用) public override void OnBindViewHolder (RecyclerView.ViewHolder viewHolder, int position) { var item = items [position]; // 用该元素替换视图的内容 var holder = viewHolder as MyViewHolder; holder.TextView.Text = items[position]; } public override int ItemCount { get { return items.Length; } } }
在该OnCreateViewHolder方法中,我们首先为View充气,并创建ViewHolder类的实例。该实例必须返回。当需要新的ViewHolder实例时,适配器将调用此方法。不会为每个单元格调用此方法。一旦RecyclerView具有足够的单元格来填充视图,它将重新使用从View中滚动出来的旧单元格来存储其他单元格。
OnBindViewHolder适配器调用该回调以在指定位置显示数据。此方法应更新itemView的内容以反映给定位置的项目。
由于单元格仅包含一个TextView,因此我们可以使用一个简单的ViewHolder,如下所示。
public class MyViewHolder :RecyclerView.ViewHolder { public TextView TextView { get; set; } public MyViewHolder (TextView v) : base (v) { TextView = v; } }
下一步是连接Activity。
RecyclerView mRecyclerView; MyAdapter mAdapter; protected override void OnCreate (Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); mRecyclerView = FindViewById<RecyclerView> (Resource.Id.recyclerView); // 插入线性布局管理器: var layoutManager = new LinearLayoutManager (this) { Orientation =LinearLayoutManager.Vertical}; mRecyclerView.SetLayoutManager(layoutManager); mRecyclerView.HasFixedSize= true; var recyclerViewData = GetData(); // 插入我的适配器: mAdapter = new MyAdapter (recyclerViewData); mRecyclerView.SetAdapter(mAdapter); } string[] GetData() { string[] data; . . . return data; }
LayoutManager类负责在RecyclerView中测量和放置项目视图,并确定何时回收用户不再可见的项目视图的策略。在之前RecyclerView,我们必须ListView像在垂直滚动列表中那样使用单元格排列,并在GridView二维可滚动网格中显示项目。但是现在我们可以通过设置不同的LayoutManger来使用RecyclerView实现这两个目标。LinearLayoutManager像在ListView中一样GridLayoutManager排列单元格,并以Grid方式排列单元格。
C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互作用的对象组成。一个对象采取的动作称为方法。 相同种类的对象通常具有相同的属性,或者说,是在相同的类中。 例如,以 Rectangle(矩形)对象为例。它具有 length 和 width 属性。 根据设计,它可能需要接受这些属性值、计算面积和显示细节的方法。 让我们来看看一个 Rectangle(矩形)类的实现,并借此讨论
不要被各种关于 reducers, middleware, store 的演讲所蒙蔽 —— Redux 实际是非常简单的。如果你有 Flux 开发经验,用起来会非常习惯。没用过 Flux 也不怕,很容易! 下面的教程将会一步步教你开发简单的 Todo 应用。 Action Reducer Store 数据流 搭配 React 示例:Todo 列表
StackExchange.Redis 中核心对象是在 StackExchange.Redis 命名空间中的 ConnectionMultiplexer 类,这个对象隐藏了多个服务器的详细信息。 因为ConnectionMultiplexer要做很多事,它被设计为在调用者之间可以共享和重用。 你不应该在执行每一个操作的时候就创建一个 ConnectionMultiplexer. 它完全是线程安全的
本部分介绍了 ES6 中的常用基本概念,旨在让大家对 ES6 有个初步的理解。具体内容包括: 变量 字符串 数值 数组 函数 对象 正则 集合 Symbol
路由配置 路由匹配原理 History 默认路由(IndexRoute)与 IndexLink
只是打印出 hello world 肯定是不够的,是吗?你会希望做得比这还要多——你想要输入一些内容,操纵它,然后从中得到一些输出出来的内容。我们可以在 Python 中通过使用变量与常量来实现这一目标,在本章中我们还会学习其它的一些概念。自本章起,书中将出现大量程序源代码内容,在源代码中会包含一些英文语句或者英文注释。为保持源代码整体美观以及避免其它不必要的改动,在代码内容中出现的英文语句将会保
本章主要介绍两个方面的内容: 字符编码 输入和输出 其中,字符编码的概念很重要,不管你用的是 Python2 还是 Python3,亦或是 C++ 等其他编程语言,希望读者厘清这个概念,当遇到 UnicodeEncodeError 和 UnicodeDecodeError 时才能从容应对,而不是到处查找资料。
我们用一个最简单的程序来开始对GTK的介绍,下面的程序将创造一个200×200像素的窗体。 新建一个名为 example-0.c 的文件,写入如下内容: #include <gtk/gtk.h> int main (int argc, char *argv[]) { GtkWidget *window; gtk_init (&argc, &argv); window