2 yiranwujixian yiranwujixian 于 2012.12.21 11:25 提问

能将一个java监听器分离成给他自己的函数么?

我能将set-listener那一行分成小行么?
这是我现在的代码:

protected void onCreate(Bundle savedInstanceState) {
   Preference button = (Preference)getPreferenceManager().findPreference("exitlink");      

      button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
             @Override
             public boolean onPreferenceClick(Preference arg0) {
                finish();   
                return true;
             }
        }); 

我想要像这样的:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Preference button = (Preference)getPreferenceManager().findPreference("exitlink");      
    if(button != null) {
         button.setOnPreferenceClickListener(onPreferenceClick);
    }        
}

public boolean onPreferenceClick(Preference arg0) {
    finish();   
    return true;
}

2个回答

niangzhi
niangzhi   2012.12.21 13:43
已采纳

上边的你的代码基本是可以的。给你上边的代码做个小改动:

button.setOnPreferenceClickListener(this);

然后按照需求,让你的类实现特定的接口,在这种情况下 Preference.OnPreferenceClickListener.

可以写一个函数,这个函数返回一个监听器,当你想要写类似的监听器但是需要一些变化的时候非常有用,就像下边这样

private Preference.OnPreferenceClickListener getListener(int listenerId) {
    return new Preference.OnPreferenceClickListener() {
         @Override
         public boolean onPreferenceClick(Preference arg0) {
            Log.i("MyTag", "Listener " + listenerId + " invoked!");
            finish();   
            return true;
         }
    };
}
yiranwujixian
yiranwujixian 谢谢,我已经给我的类中加了接口OnPreferenceClickListener,我想我知道你的意思了。谢谢。
大约 5 年之前 回复
Sueyexin
Sueyexin   2012.12.21 14:21

你可以在你的方法外创建一个变量:

private Preference.OnPreferenceClickListener listener = new Preference.OnPreferenceClickListener() {
     @Override
     public boolean onPreferenceClick(Preference arg0) {
        finish();   
        return true;
     }
};

然后用它作为一个变量:setListener(listener). 这个可以让你再你的activity中有多个相同的监听器类

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!