2016-04-07 74 views
0

我不知道這些被稱爲,但我想改變這樣的事情:如何將內部功能更改爲自己的功能?

fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

到一些地方的代碼是不是「嵌套」這樣的說法內。換句話說什麼,我已經記:

fab.setOnClickListener(something goes here); 

//...and then within its own method somewhere, 

public void onClickMethodForOnClickListenerOrSomething(View view) { 
    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
    .setAction("Action", null).show(); 
} 

我不知道如果我讓自己清楚,但我基本上要撕裂了聽者作爲參數,使之成爲一個獨立的功能。我發現它讓事情變得更清潔,因爲有這麼多的監聽器,我的OnCreate方法中有很多代碼積累起來。

回答

3

因爲你需要重寫的onClick方法,你不能將其重命名,但你可以做的folliwing:

public void onClickMethodForOnClickListenerOrSomething(View view) { 
    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
    .setAction("Action", null).show(); 
} 

public void yourOtherMethod() { 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      onClickMethodForOnClickListenerOrSomething(view); 
     } 
    }); 
} 
0

如果您使用的是Java 8,你可以只寫

fab.setOnClickListener(ClassName::onClickMethodForOnClickListenerOrSomething); 

如果你不是你可以在View.OnClickListener中調用你的onClickMethodForOnClickListenerOrSomething

2

方法fab.setOnClickListener()預計的對象爲View.OnClickListener

所以一種選擇是創建一個新的類,它從View.OnClickListener延伸並覆蓋onClick()方法。然後,你可以這樣做

fab.setOnClickListener(new MyOnClickListener()); 

另一種選擇是使用lambda表達式所以像

fab.setOnClickListener((View view)->(Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show())); 
0

你有一個接口,OnClickListener。這個接口應該由View(或其派生)實現。你的問題的第一個例子是內聯實現的一個接口。我假設你想改變/移動到它自己的類中實現它的視圖。事情是這樣的:

public class Fab implements OnClickListener { 

    @Override 
    public void onClick(View v) { 
     Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
     .setAction("Action", null).show(); 
    } 

} 

用法:

Fab fab = new Fab() 
fab.setOnClickListener(aView);