Androidでプログラムを少し始めました。1つのアクティビティに3つのボタンがあります。
同じOnClick
イベントをすべてのボタンに(それらが完全に異なるアクションを実行する場合でも)、メソッドSwitch(id)
case case caseに割り当てるコード例をいくつか見ました...
より良いアプローチは何ですか? 1つのonClick
メソッドと切り替え、または多くのメソッド(各ボタンに1つ)
ありがとう。
コーディング行を減らしたい場合はView's OnClick() with switch statement
を使用し、すべてのクリックを個別に処理したい場合(コードの理解と保守を容易にするため)、すべてのbutton's onClick().
を使用します
更新:
アクティビティレイアウトxmlファイルでボタンを宣言している場合は、属性Android:onClick=""
すべてのボタンに同じメソッド名を付け、アクティビティにそのメソッドを実装します。これで、すべてのボタンに対して1つのメソッドが作成され、そのメソッドでidを持つボタンが区別されます。
例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<Button Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:onClick="buttonOnClick"
Android:layout_height="wrap_content"
Android:text="Hello, I am a Button 1" />
<Button Android:id="@+id/button2"
Android:layout_width="wrap_content"
Android:onClick="buttonOnClick"
Android:layout_height="wrap_content"
Android:text="Hello, I am a Button 2" />
<Button Android:id="@+id/button3"
Android:layout_width="wrap_content"
Android:onClick="buttonOnClick"
Android:layout_height="wrap_content"
Android:text="Hello, I am a Button 3" />
</LinearLayout>
アクティビティにbuttonOnClick
のように実装します。
public void buttonOnClick(View view)
{
switch(view.getId())
{
case R.id.button1:
// Code for button 1 click
break;
case R.id.button2:
// Code for button 2 click
break;
case R.id.button3:
// Code for button 3 click
break;
}
}
または、buttonOnClick
の代わりに実装されたビューのOnClickListerner'sonClick
を使用する必要があるなど、アクティビティに動的に追加されたボタンに同じスイッチケースを適用できます。
この方法を使用します。
@Override
public void onCreate(Bundle savedInstanceState) {
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
button3.setOnClickListener(onClickListener);
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
//DO something
break;
case R.id.button2:
//DO something
break;
case R.id.button3:
//DO something
break;
}
}
};
this.btnAddFriedtoFacebook = (Button) this.findViewById(R.id.btnAddFriedtoFacebook);
this.btnAddFriedtoFacebook.setOnClickListener(this.backButtonClickListener);
public OnClickListener backButtonClickListener = new OnClickListener()
{
public void onClick(final View view)
{
if (view == MatchInfoActivity.this.btnBack)
{
MatchInfoActivity.this.finish();
}
if( view == MatchInfoActivity.this.btnAddFried){
Intent i = new Intent(Intent.ACTION_VIEW);
MatchInfoActivity.this.startActivity(i);
}
if( view == MatchInfoActivity.this.btnAddBuddy){
Intent i = new Intent(Intent.ACTION_VIEW);
MatchInfoActivity.this.startActivity(i);
}
}
};
これが良い方法です。
onClick
をxml(レイアウト)に登録する方が良い方法だと思います。
編集:
関連するスレッドが見つかりました:
@Nguyenの回答に少し追加。
findViewById(R.id.buttonOne).setOnClickListener(buttonClickListener);
.... .... .... ....
findViewById(R.id.buttonN).setOnClickListener(buttonClickListener);
private View.OnClickListener buttonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonOne:
// do something
break;
.... .... .... ....
case R.id.buttonN:
// do something
break;
}
}
};
これは、ボタン変数を初期化したくないが、ボタンクリックイベントを追跡する場合に便利です。ありがとう!
XMLレイアウトにonClickイベントを登録し、コードで処理します。これは私がそれをする方法です:
<Button
Android:id="@+id/btplus"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Click me"
Android:onClick="onBtnClicked">
。classのメソッド
public void onBtnClicked(View v) {
switch (v.getId()) {
case R.id.btplus:
Toast.makeText(getApplicationContext(), "Plus is clicked" + "+", Toast.LENGTH_SHORT).show();
break;
case R.id.btminu:
Toast.makeText(getApplicationContext(),"Minus is clicked" + "-", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}