我的Activity正在尝试创建一个AlertDialog,它需要一个Context作为参数.如果我使用,这可以按预期工作:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Run Code Online (Sandbox Code Playgroud)
但是,我很谨慎地使用"this"作为上下文,因为当Activity被销毁并重新创建甚至在屏幕旋转之类的简单事件时,可能会发生内存泄漏.来自Android开发者博客上的相关帖子:
有两种简单的方法可以避免与上下文相关的内存泄漏.最明显的一个是避免在其自身范围之外逃避上下文.上面的例子显示了静态引用的情况,但内部类及其对外部类的隐式引用可能同样危险.第二种解决方案是使用Application上下文.只要您的应用程序处于活动状态并且不依赖于活动生命周期,此上下文就会存在.如果您计划保留需要上下文的长期对象,请记住应用程序对象.您可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松获取它.
但是对于这AlertDialog()两者来说,getApplicationContext()或者getApplication()作为一个Context是可接受的,因为它抛出异常:
"无法添加窗口 - 令牌null不适用于应用程序"
那么,这真的应该被视为一个"错误",因为我们被正式建议使用Activity.getApplication(),但它没有宣传的功能吗?
吉姆
什么是一些常见的,现实世界的例子使用Builder模式的?它给你带来了什么?为什么不使用工厂模式?
我想要一个AlertDialog构建器,它只有一个按钮,表示OK或Done或者其他东西,而不是默认的yes和no.可以使用标准的AlertDialog完成,还是我必须使用其他东西?
这可能很容易,但不知道如何.
我有一个表可以具有特定非键列字段的重复值.如何使用查询生成器或Eloquent编写SQL查询,该查询将获取具有该列的不同值的行?
请注意,我不是仅提取该列,而是与其他列值一起提取,因此distinct()可能无法正常工作.所以这个问题基本上可以是如何指定我想在查询中区分的列,现在不distinct()接受任何参数?
到目前为止,我使用构建器模式的以下实现(与此处描述的实现相反):
public class Widget {
public static class Builder {
public Builder(String name, double price) { ... }
public Widget build() { ... }
public Builder manufacturer(String value) { ... }
public Builder serialNumber(String value) { ... }
public Builder model(String value) { ... }
}
private Widget(Builder builder) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这适用于我遇到的大多数情况,我需要使用各种必需/强制和可选参数来构建复杂对象.然而,最近我一直在努力了解当所有参数都是强制性的(或至少绝大多数参数)时,模式是如何有益的.
解决这个问题的一种方法是将传入的参数逻辑分组到它们自己的类中,以减少传递给构建器构造函数的参数数量.
例如,而不是:
Widget example = new Widget.Builder(req1, req2, req3,req4,req5,req6,req7,req8)
.addOptional(opt9)
.build();
Run Code Online (Sandbox Code Playgroud)
分组如下:
Object1 group1 = new Object1(req1, req2, req3, req4);
Object2 group2 …Run Code Online (Sandbox Code Playgroud) 我有一个访问某些属性值的简单任务.下面是一个简单的脚本,用于Nokogiri::XML::Builder创建一个简单的xml doc.
require 'nokogiri'
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
xml.Placement(:messageId => "392847-039820-938777", :system => "MOD", :version => "2.0") {
xml.objects {
xml.object(:myattribute => "99", :anotherattrib => "333")
xml.nextobject_ '9387toot'
xml.Entertainment "Last Man Standing"
}
}
end
puts builder.to_xml
puts builder.root.attributes["messageId"]
Run Code Online (Sandbox Code Playgroud)
结果如下:
<?xml version="1.0" encoding="UTF-8"?>
<Placement messageId="392847-039820-938777" version="2.0" system="MOD">
<objects>
<object anotherattrib="333" myattribute="99"/>
<nextobject>9387toot</nextobject>
<Entertainment>Last Man Standing</Entertainment>
</objects>
</Placement>
C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/document.rb:178:in `add_child': Document already has a root node (RuntimeError)
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/node.rb:455:in `parent='
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/builder.rb:358:in `insert'
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/builder.rb:350:in `method_missing' …Run Code Online (Sandbox Code Playgroud) 我想知道在对象中使用方法链接在流畅的界面中实现.When条件的最佳方法是什么?Builder
例如,我将如何实现以下示例中的.WithSkill()和.When()方法:
var level = 5;
var ninja = NinjaBuilder
.CreateNinja()
.Named("Ninja Boy")
.AtLevel(level)
.WithShurikens(10)
.WithSkill(Skill.HideInShadows)
.When(level > 3)
.Build()
Run Code Online (Sandbox Code Playgroud)
更新 - 可以在此处找到示例解决方案.
我有一个非常简单的表,当tocuh一个单元格时,它打开一个带有一个UITextfield的新视图.我想要的是键盘将自动打开,用户不必触摸UITextfield.
这一切都在Interface Builder中完成,所以我不知道我是怎么做到的.我想我需要在某个时候设定焦点?
谢谢
随着继承树的深入,我有一个对象层次结构,其复杂性会增加.这些都不是抽象的,因此,它们的所有实例都具有或多或少的复杂目的.
由于参数的数量非常多,我想使用Builder Pattern来设置属性而不是编码几个构造函数.由于我需要满足所有排列,我的继承树中的叶类将具有伸缩构造函数.
当我在设计中遇到一些问题时,我在这里寻找答案.首先,让我举一个简单,浅薄的例子来说明问题.
public class Rabbit
{
public String sex;
public String name;
public Rabbit(Builder builder)
{
sex = builder.sex;
name = builder.name;
}
public static class Builder
{
protected String sex;
protected String name;
public Builder() { }
public Builder sex(String sex)
{
this.sex = sex;
return this;
}
public Builder name(String name)
{
this.name = name;
return this;
}
public Rabbit build()
{
return new Rabbit(this);
}
}
}
public class Lop extends Rabbit
{
public float …Run Code Online (Sandbox Code Playgroud) 有没有办法使用自动构建器为类创建构建器(Joshua Bloch的Builder模式)Eclipse?例如菜单中的选项,插件或其他内容.我在" Refactor" 下找不到任何东西.
builder ×10
java ×4
android ×2
button ×1
c# ×1
eclipse ×1
eloquent ×1
inheritance ×1
interface ×1
iphone ×1
laravel ×1
nokogiri ×1
objective-c ×1
parameters ×1
ruby ×1
uitextfield ×1