アプリのいずれかのボタンを押すと音を鳴らそうとします。
アプリのすべてのボタンにリスナーを追加するためのマイナーな邪魔な方法はどのようになっていますか?
Androidの汎用リスナーを上書き(および拡張)することはできますか?
ありがとう。
アプリのいずれかのボタンを押すと音を鳴らそうとします。
アプリのすべてのボタンにリスナーを追加するためのマイナーな邪魔な方法はどのようになっていますか?
Androidの汎用リスナーを上書き(および拡張)することはできますか?
ありがとう。
すべてのボタンに 1 つのリスナーを設定でき、タグでも識別できます。
View.OnClickListener myClickLIstener= new View.OnClickListener() {
public void onClick(View v) {
String tag = (String) v.getTag();
Log.e("","tag : "+tag)
// your stuff
}
};
リスナーを設定しています...
btn1.setOnClickListener(myClickLIstener);
btn1.setTag("btn1");
btn2.setOnClickListener(myClickLIstener);
btn2.setTag("btn2");
編集 :
こんなの探してるのか…
class superTop implements View.OnClickListener {
@Override
public void onClick(View v) {
Log.e("", "onClick superTop");
}
}
class NewClick extends superTop implements View.OnClickListener {
@Override
public void onClick(View v) {
Log.e("", "onClick NewClick");
super.onClick(v);
}
}
findViewById(R.id.button1).setOnClickListener(new NewClick());
両方のリスナーを呼び出すことができます...
あるいは単に
class YourClass implements OnClickListener{
buttonOne.setOnclickListener(this);
buttonTwo.setOnclickListener(this);
buttonThree.setOnclickListener(this);
public void onClick(View v){
//do your stuff;
}
}
または、必要に応じて、カスタム Button を作成します。
Class Yourbutton extends Button implements Button.OnClickListener{
public Yourbutton(Context c) {
super(c);
}
public Yourbutton(Context c,AttributeSet s){
super(c,s);
}
public void onClick(View v){
//do your stuff;
}
}
これで、一般的なジョブを実行する一般的なボタンとして Yorkbutton を使用できるようになりました。
これを行うには、最初にクラスに OnClickListener を実装させます
button1.setOnClickListener(this);
button2.setOnClickListener(this);
onClick メソッドで次の操作を行います。
public void onClick(View view) {
switch(view.getId()){
//here you need the id of the button i.e. its id in the xml file
case R.id.button1:
// do whatever you want button1 to do
break;
case R.id.button2:
// do whatever you want button2 to do
break;
}
}
属性を使用できandroid:onClick
ます。次のように、同じ onClick メソッドをすべてに設定します。
<Button
[...]
android:onClick="handleButton"/>
<Button
[...]
android:onClick="handleButton"/>
そしてあなたのJavaファイルで:
public void handleButton(View v){
// do some stuff
}
このようなワンクリックリスナーを作成し、同じことをしたい場合はすべてのボタンから呼び出します
View.OnClickListener yourClickListener = new View.OnClickListener() {
public void onClick(View v) {
//play the music
}
};
次に、そのリスナーを呼び出します
button1.setOnClickListener(yourClickListener);
button2.setOnClickListener(yourClickListener);
button3.setOnClickListener(yourClickListener);
同じように動作させたいボタンの同じメソッドを呼び出します
<LinearLayout ...>
<Button android:text="1" onClick="onButtonClicked" clickable="true" />
<Button android:text="2" onClick="onButtonClicked" clickable="true" />
<Button android:text="3" onClick="onButtonClicked" clickable="true" />
<Button android:text="4" onClick="onButtonClicked" clickable="true" />
</LinearLayout>
上記の 4 つのボタンのテキストは異なりますが、onClick のメソッドは同じであるため、findViewById を使用して Java クラスでそれらを取得する必要はありません。
レイアウトが表示されているアクティビティで、メソッドを追加するだけです
public void onButtonClicked(View v){
// do whatever needs to be done. For example:
Toast.makeText(getApplicationContext(), ((Button) v).getText() + " clicked", Toast.LENGTH_SHORT).show();
}
2番目の方法
すべてに対して同じコードを繰り返す必要はありません。次のような一般的なリスナーを試すことができます。
private OnClickListener genericClickListener= new OnClickListener() {
public void Click(View v) {
// do something
}
};
あとは、3 つのボタンすべてを登録して、この genericClickListener を使用するだけです。つまり、内部onCreate()
で、
Button firstbtn = (Button) findViewById(R.id.firstbtn);
Button secondbtn = (Button) findViewById(R.id.secondbtn);
Button thirdbtn = (Button) findViewById(R.id.thirdbtn);
firstbtn.setOnClickListener(genericClickListener);
secondbtn.setOnClickListener(genericClickListener);
thirdbtn.setOnClickListener(genericClickListener);
第三の方法
単一の関数/メソッドを作成し、すべてのボタンのonClickが同じを呼び出しますMethod/Function
。