我对在C#中删除事件处理程序的语法感到困惑.
Something += new MyHandler(HandleSomething); // add
Something -= new MyHandler(HandleSomething); // remove
Run Code Online (Sandbox Code Playgroud)
"new"在每一行上创建一个新对象,因此您添加一个对象,然后要求它删除另一个对象.
这可以起到什么作用?
从语法来看肯定不明显.
哪个是使用处理程序的更好方法.任何优点.我遇到的所有示例似乎都给出了内联版本.
Handler.Callback在类中使用implements 并实现接口方法.
要么
使用内联代码版本
private Handler mHandler = new Handler(){ ....};
Run Code Online (Sandbox Code Playgroud) 每隔5秒,我想调用我的web服务并获取文本(而不是图像),然后在我的ImageAdapter中显示它.实现这一目标的最佳方法是什么?
鉴于此代码:
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
public static final int MESSAGE_NOT_CONNECTED = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
// -------------------------------------------------
public final void setStatus(int Rid) {
final ActionBar actionBar = getActionBar();
actionBar.setSubtitle(Rid);
}
// -------------------------------------------------
static Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_NOT_CONNECTED:
setStatus(R.string.title_not_connected);
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:无法对非静态方法setStatus(int)进行静态引用...
这是有道理的,因为setStatus()中的getActionBar()是一个非静态方法.
由于警告,我使Handler类保持静态:此Handler类应该是静态的,否则可能会发生泄漏.
问题:如何从静态处理程序中正确访问setStatus()方法?
编辑:新的处理程序代码是答案.
static class hHandler extends Handler {
private final WeakReference<MainActivity> …Run Code Online (Sandbox Code Playgroud) 我有一个以编程方式生成ScrollView的TextView内部.我希望TextView不时更新文本,有些人已经实现了处理函数来更新TextViewGUI元素.这似乎正确地调用/工作.
但是,目前我发现实际获得TextView显示附加信息的唯一方法是调用:
consoleText.append("New text to add to TextView");
// then:
myScrollView.removeView(myTextView);
myScrollView.addView(myTextView);
Run Code Online (Sandbox Code Playgroud)
这不是特别优化,并且想知道如何我可以刷新内容ScrollView以显示我新添加的信息......
也:
invalidate();
postvalidate();
Run Code Online (Sandbox Code Playgroud)
似乎没有做任何事情 - TextView对象中有新文本(查看调试)除非我调用add/remove函数,否则它不会将其绘制到屏幕上.
感谢您提供的任何信息/帮助
FR
我正在使用FBDialogs在Facebook上分享.
Facebook共享工作正常,但处理程序永远不会被调用(我在第一行放置断点)
我的SDK是通过CocoaPods安装的
pod 'Facebook-iOS-SDK', '3.9.0'
Run Code Online (Sandbox Code Playgroud)
这是代码,几乎是facebook开发页面上的例子.我正在使用ios7测试iPod.
// If the Facebook app is installed and we can present the share dialog
if ([FBDialogs canPresentShareDialogWithParams:params]) {
// Present the share dialog
[FBDialogs presentShareDialogWithParams:params
clientState:nil
handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
//never gets here
if(error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:[NSString stringWithFormat: @"O comparilhando não foi bem sucedido. %@",error.description]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sucesso"
message:@"O compartilhando foi bem sucedido"
delegate:nil …Run Code Online (Sandbox Code Playgroud) 几天以来,我试图弄清楚如果我执行代码会发生什么
void function(){
//somePreExecutionCode
new Handler().post(new Runnable(){
@Override
public void run(){
//someCode
}
});
}
Run Code Online (Sandbox Code Playgroud)
它似乎没有阻止UI,所以调用function()的按钮在someCode完成之前不会卡在点击的位置.但是如果somePreExecutionCode启动了progressBar,那么当someCode完成时,progressBar会在完全相同的时刻显示.我知道,有AsyncTasks,但还有其他可能吗?
最重要的是什么
new Handler().post
Run Code Online (Sandbox Code Playgroud)
和
View.post
Run Code Online (Sandbox Code Playgroud)
?
在hapi处理程序中,我尝试在发送回视图之前在代码中设置我的响应的标头.
reply().header('cache-control', 'no-cache');
{....}
reply.view('myView', myContext);
Run Code Online (Sandbox Code Playgroud)
你我必须使用这种hold方法吗?在这种情况下,如何在渲染视图时重用响应?
谢谢你的帮助.
我正在尝试为JMS Serializer Bundle使用自定义处理程序
class CustomHandler implements SubscribingHandlerInterface
{
public static function getSubscribingMethods()
{
return array(
array(
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'format' => 'json',
'type' => 'integer',
'method' => 'serializeIntToJson',
),
);
}
public function serializeIntToJson(JsonSerializationVisitor $visitor, $int, array $type, Context $context)
{
die("GIVE ME SOMETHING");
}
}
Run Code Online (Sandbox Code Playgroud)
这什么都不做,也不会死.这就是我注册处理程序的方式
$serializer = SerializerBuilder::create()
->configureHandlers(function(HandlerRegistry $registry) {
$registry->registerSubscribingHandler(new MyHandler());
})
->addDefaultHandlers()
->build();
$json = $serializer->serialize($obj, 'json');
Run Code Online (Sandbox Code Playgroud)
我的处理程序从未被调用过,我无法操纵序列化数据.
现在,我有一个事件监听器,可以监听屏幕上的点击.屏幕上还有一个按钮.当我点击按钮时,事件监听器将在onclick之前执行.有没有办法让onclick有更高的优先级?
<script>
document.body.addEventListener('click',function(){alert('1');}, false);
function clicked() {
alert('2');
}
</script>
<button onclick="clicked()">Click this</button>
Run Code Online (Sandbox Code Playgroud)
单击该按钮也会触发事件处理程序.1显示在2之前,当我点击按钮时.我想要先显示2.