2016-04-07 24 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を行うことができますので:あなたは、Java 8を使用している場合

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

は、あなただけの

fab.setOnClickListener(ClassName::onClickMethodForOnClickListenerOrSomething); 

の場合を書くことができますView.OnClickListenerでonClickMethodForOnClickListenerOrSomethingを呼び出すことはできません

2

メソッドfab.setOnClickListener()は、オブジェクトがであると予想しています210。

したがって、View.OnClickListenerから拡張され、onClick()メソッドをオーバーライドする新しいクラスを作成することもできます。そして、あなたは他のオプションは、あなたがインターフェイス、OnClickListenerを持って

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

のようなものので、ラムダを使用することです

fab.setOnClickListener(new MyOnClickListener()); 

ような何かを行うことができます。このインタフェースは、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); 
関連する問題