web-dev-qa-db-ja.com

複数のボタンのOnClickListener()android

現在、Androidで簡単な電卓アプリを作成しています。数字ボタンを押すと、その数字で電卓画面が更新されるようにコードを設定しようとしています。現在、私はこのようにしています。

    Button one = (Button) findViewById(R.id.oneButton);
    one.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            TextView output = (TextView) findViewById(R.id.output);
            output.append("1");
        }
    });

動作しますが、電卓のすべてのボタンにこの同じコードを書いています。ご想像のとおり、非常に冗長です。とにかくこのコードをより効率的な方法で書くことができますか?ボタンごとにこのメソッドを記述しないことを伴うものですか?

66
user3011685

簡単にするには、次の手順に従うだけです...

onClickListenerごとに新しいButtonを記述する必要はありません... View.OnClickListerActivity/Fragmentに実装するだけです。Button、TextView`などのonClickイベントを処理するためのonClick()という新しいメソッドを実装します。

  1. Activity/FragmentOnClickListener()を実装する
public class MainActivity extends Activity implements View.OnClickListener {

}
  1. Activity/FragmentでonClick()メソッドを実装します
public class MainActivity extends Activity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onClick(View v) {
      // default method for handling onClick Events..
    }
}
  1. ボタンの実装OnClickListener()
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.your_layout);

    Button one = (Button) findViewById(R.id.oneButton);
    one.setOnClickListener(this); // calling onClick() method
    Button two = (Button) findViewById(R.id.twoButton);
    two.setOnClickListener(this);
    Button three = (Button) findViewById(R.id.threeButton);
    three.setOnClickListener(this);

}
  1. IDでボタンを検索し、コードを実装します。
@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.oneButton:
            // do your code
            break;

        case R.id.twoButton:
            // do your code
            break;

        case R.id.threeButton:
            // do your code
            break;

        default:
            break;
    }

}

詳細については、このリンクを参照してください。

https://androidacademic.blogspot.in/2016/12/multiple-buttons-onclicklistener-Android.html

これにより、多くのボタンクリックイベントの処理が容易になり、管理が簡単になります...

202

プロパティを設定できます:

Android:onClick="buttonClicked"

これらの各ボタンのxmlファイルで、Javaコードでこれを使用します。

public void buttonClicked(View view) {

    if (view.getId() == R.id.button1) {
        // button1 action
    } else if (view.getId() == R.id.button2) {
        //button2 action
    } else if (view.getId() == R.id.button3) {
        //button3 action
    }

}
46
Andro

View.OnClickListenerを実装する専用クラスを作成しました。

public class ButtonClickListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
    }

}

次に、MainActivityでこのクラスのインスタンスを作成しました

private ButtonClickListener onClickBtnListener = new ButtonClickListener();

そして、ボタンのonClickListenerを設定します

btn.setOnClickListener(onClickBtnListener);
8
Vadim Novitskiy

各ボタンのタグを操作したいもの、この場合はおそらく整数に設定します。次に、すべてのボタンに必要なOnClickListenerは1つだけです。

Button one = (Button) findViewById(R.id.oneButton);
Button two = (Button) findViewById(R.id.twoButton);
one.setTag(new Integer(1));
two.setTag(new Integer(2));

OnClickListener onClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        TextView output = (TextView) findViewById(R.id.output);
        output.append(v.getTag());
    }
}

one.setOnClickListener(onClickListener);
two.setOnClickListener(onClickListener);
6
public class MainActivity extends AppCompatActivity implements OnClickListener  {
    Button  b1,b2;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1= (Button) findViewById(R.id.button);
        b2= (Button) findViewById(R.id.button2);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
    }


    @Override
    public void onClick(View v)
    {
        if(v.getId()==R.id.button)
        {
            Intent intent=new Intent(getApplicationContext(),SignIn.class);
            startActivity(intent);
        }
        else if (v.getId()==R.id.button2)
        {
            Intent in=new Intent(getApplicationContext(),SignUpactivity.class);
            startActivity(in);
        }
    }
}
2

私は同様の問題を抱えていて、私がやったことは、ボタンの配列を作成することです

Button buttons[] = new Button[10];

次に、クリックリスナーに実装し、XML IDを参照するには、次のようなループを使用しました

for (int i = 0; i < 10; i++) {      
String buttonID = "button" + i;
        int resID = getResources().getIdentifier(buttonID, "id",
                "your package name here");
        buttons[i] = (Button) findViewById(resID);
        buttons[i].setOnClickListener(this);
    }

ただし、それらの呼び出しは、Pragの回答ポイント4と同じです。

1
Akshit Agarwal

Activity/FragmentパブリッククラスMainActivityにonClick()メソッドを実装すると、ActivityがView.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onClick(View v) {

switch(itemId){

//ネビゲーションバーでフラグメントを呼び出した場合に使用されます。

       case R.id.nav_menu1:
            fragment = new IntroductionFragment();
            break;

//ネビゲーションバーを使用したコールアクティビティが使用される場合。

        case R.id.nav_menu6:
            Intent i = new Intent(MainActivity.this, YoutubeActivity.class);
            startActivity(i);
  // default method for handling onClick Events..
}

}

1
vicky mahale
public void onClick(View v) {
    int id = v.getId();
    switch (id){
        case R.id.button1:
            //do ur code
            Toast.makeText(this,"This is button 1",Toast.LENGTH_SHORT).show();
            break;
        case R.id.button2:
            Intent intent = new Intent(this,SecondActivity.class);
            Intent.putExtra("key",value);
            startActivity(intent);
            break;
        case R.id.button3:
            //do ur code
            break;
        case R.id.button4:
            //do ur code;
            break;
        default:
            //do ur code;
    }
}
1
Sazidur Rahman

これを使用できます

    TextView output = (TextView) findViewById(R.id.output);
    one.setOnClickListener(youractivity.this);
    // set the onclicklistener for other buttons also

    @Override
    public void onClick(View v) {
      int id = v.getId();
    switch(id) {
    case R.id.oneButton:      
       append("1",output);
       break;
    case R.id.twoButton:
        append("2",output);
       break;
    case R.id.threeButton:
        append("3",output);
       break;
     } 
      }

 private void append(String s,TextView t){
  t.setText(s); 
}

別の方法でアクティビティのビューを識別できます。

0
user3905781

findViewById(btn).setOnClickListener(this)のリストに加えて、長いif/elseチェーン(またはスイッチ)を使用するとisいことがわかります。オーバーライドを使用して新しいView.OnlickListenersをインラインで作成する方法は次のとおりです。

findViewById(R.id.signInButton).setOnClickListener(new View.OnClickListener()
    { @Override public void onClick(View v) { signIn(); }});
findViewById(R.id.signOutButton).setOnClickListener(new View.OnClickListener()
    { @Override public void onClick(View v) { signOut(); }});
findViewById(R.id.keyTestButton).setOnClickListener(new View.OnClickListener()
    { @Override public void onClick(View v) { decryptThisTest(); }});
findViewById(R.id.getBkTicksButton).setOnClickListener(new View.OnClickListener()
    { @Override public void onClick(View v) { getBookTickers(); }});
findViewById(R.id.getBalsButton).setOnClickListener(new View.OnClickListener()
    { @Override public void onClick(View v) { getBalances(); }});
0
mholberger