1

是否可以在静态方法中添加 onClickListener?

我正在尝试创建一个便利类,对 Crouton 进行一些常见的修改(Ben Weiss 的实现基于 Cyril Mottier 的文章)。我确实有一个分叉版本(我修改了源代码),但我试图减少我所依赖的库项目,而是选择包含他在 Maven 中提供的 jar,但该类设置为final所以我不能从那里扩展它。

我所做的是:

public class CroutonEx {

    static Crouton crouton;

    ...

    public static Crouton makeDismissOnClick(Crouton crouton) {
        CroutonEx.crouton = crouton;
        return crouton.setOnClickListener(new View.OnClickListener() {            
            @Override
            public void onClick(View v) {
                Crouton.hide(CroutonEx.crouton);                
            }
        });
    }
}

我的问题是:

  • 当被触发时,它是否会隐藏当前存储在或它在侦听器注册点引用onClick(View v)的Crouton ?CroutonEx.crouton也就是说,在我的情况下,它总是相同的(Crouton 在设置侦听器后立即显示,并且仅显示几秒钟,一次仅显示一个)但在一般情况下可以保证(使用关于它将引用内存中的哪个对象)?

  • 即使这样可行,它显然也不是一个理想的方式;虽然我怀疑它会在这种特殊情况下引起问题(我想不出多个线程如何同时访问此方法(面包块只会添加到主/UI线程上)),有没有更好的方法来在实用程序类中添加侦听器,还是完全不鼓励?

谢谢!

(虽然这是一个 Android 项目,但我没有添加标签,因为我认为它不相关。)

4

0 回答 0