多个按钮的OnClickListener()android

时间:2014-09-18 05:50:41

标签: android onclicklistener

我目前正在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");
        }
    });

它有效,但我正在为计算器上的每个按钮编写相同的代码。你可以想象它是多余的。无论如何我能以更有效的方式编写这段代码吗?一个涉及不为每个按钮编写此方法的人?

11 个答案:

答案 0 :(得分:202)

您只需按照以下步骤轻松实现......

您不必为每个onClickListener撰写新的Button ...只需向View.OnClickLister / Activity实施Fragment即可实现名为onClick()的新方法,用于处理Button,TextView`等的onClick事件。

  
      
  1. OnClickListener() / Activity
  2. 中实施Fragment   
public class MainActivity extends Activity implements View.OnClickListener {

}
  
      
  1. 在您的活动/片段中实施onClick()方法
  2.   
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()按钮
  2.   
@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查找按钮并实施您的代码..
  2.   
@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

这样可以更轻松地处理许多按钮点击事件,并使管理它看起来很简单......

答案 1 :(得分:46)

您可以设置属性:

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
    }

}

答案 2 :(得分:8)

我创建了实现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);

答案 3 :(得分:6)

在每个按钮上设置一个标签,以便您可以使用它,在这种情况下可能是整数。然后,您只需要一个OnClickListener用于所有按钮:

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);

答案 4 :(得分:2)

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);
        }
    }
}

答案 5 :(得分:1)

我有类似的问题,我做的是: 创建一个按钮数组

Button buttons[] = new Button[10];

然后实现点击监听器和引用xml id' s我使用了这样的循环

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点相同。 PS-如果有人有更好的方法来调出所有按钮的onClick,请发表评论。

答案 6 :(得分:1)

在Activity / Fragment中实现onClick()方法 公共类MainActivity extends Activity实现View.OnClickListener {

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

@Override
public void onClick(View v) {

开关(itemId){

//如果你用nevigation bar调用片段然后使用。

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

//如果使用了使用nevigation bar的调用活动。

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

}

答案 7 :(得分:1)

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;
    }
}

答案 8 :(得分:0)

您可以使用此

    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); 
}

您可以使用单独的方法识别活动中的视图。

答案 9 :(得分:0)

我发现,除了TypeError: t() missing 1 required positional argument: 'self'的列表之外,使用长的if / else链(或开关)也是丑陋的。如何使用内联重写创建新的View.OnlickListeners:

findViewById(btn).setOnClickListener(this)

答案 10 :(得分:0)

不需要其他或开关,让我们开始: 在您的每个Button或任何按钮中(我正在使用ImageView),添加此属性 android:onClick="DoSomeThing"

在您的活动中:

public void DoSomeThing(View v){
    ImageView img1= (ImageView) v; //you have to cast the view i.e. if it's button, it must be cast to Button like below line

    Button b1= (Button) v;

    img1.setImageBitmap(imageBitmap); //or anything you want to do with your view, This will work for all

    b1.setText("Some Text");
 

}