Java - 具有多个onClickListener

时间:2017-07-11 03:48:02

标签: java android loops onclicklistener

我的应用程序目前有5个按钮(我稍后会添加更多),当点击每个按钮时,它会为一个项目分配一个数字。

我想知道是否有更有效的方法来编写setOnClickListner(似乎我必须使用它,因为我将它用作片段。如果我要分配onClick,我找到了一种方法在xml中但我无法将其应用于此部分代码)。我把它写了5次(将来它会更多)

    buttons[0] = (Button) view.findViewById(R.id.cut1Btn);
    buttons[1] = (Button) view.findViewById(R.id.cut2Btn);
    buttons[2] = (Button) view.findViewById(R.id.cut3Btn);
    buttons[3] = (Button) view.findViewById(R.id.cut4Btn);
    buttons[4] = (Button) view.findViewById(R.id.cut5Btn);

    buttons[0].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getActivity(), "TESTING BUTTON CLICK 1",Toast.LENGTH_SHORT).show();
            data = 1;
        }
    });

    buttons[1].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getActivity(), "TESTING BUTTON CLICK 2",Toast.LENGTH_SHORT).show();
            data = 2;
        }
    });

    buttons[2].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getActivity(), "TESTING BUTTON CLICK 3",Toast.LENGTH_SHORT).show();
            data = 3;
        }
    });

    buttons[3].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getActivity(), "TESTING BUTTON CLICK 4",Toast.LENGTH_SHORT).show();
            data = 4;
        }
    });

    buttons[4].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getActivity(), "TESTING BUTTON CLICK 5",Toast.LENGTH_SHORT).show();
            data = 5;
        }
    });

我可以做一个开关或循环吗?像分配i = 0一样,i <0。 5,i ++用于按钮数组然后用于数据使得数据= i + 1?如果是的话,有关我如何做到这一点的任何建议吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

这里的其他答案都可行,但要么使用标签(通常是一个坏主意并阻止任何其他用途),并且不是真正的面向对象。相反,你应该让一个类实例化它。

private class MyClickListener {
  private int data;
  public MyClickListener(int data) {
     this.data = data;
  } 
  public void onClick(View view) {
      Toast.makeText(getActivity(), "TESTING BUTTON CLICK" + data,Toast.LENGTH_SHORT).show();
  }
}

...

int i=0;
for(Button button : buttons) {
  button.setOnClickListener(new MyClickListener(i++));
}

答案 1 :(得分:0)

您可以使用常用方法,然后根据按钮的R.id实现切换案例 像这样的一个例子。 在onCreate( - )方法

cut1Btn = (Button) view.findViewById(R.id.cut1Btn);
    cut2Btn = (Button) view.findViewById(R.id.cut2Btn);
    cut3Btn = (Button) view.findViewById(R.id.cut3Btn);
    cut4Btn = (Button) view.findViewById(R.id.cut4Btn);
    cut5Btn = (Button) view.findViewById(R.id.cut5Btn);

cut1Btn.setOnClickListener(this);
cut2Btn.setOnClickListener(this);
cut3Btn.setOnClickListener(this);
cut4Btn.setOnClickListener(this);
cut5Btn.setOnClickListener(this);

在您的活动中实施View.onClickListener 并在您的活动中覆盖此方法

public void onClick(View v){
switch(v.getId()){
case R.id.cut1Btn:
//Put Your Code Here
break;
case R.id.cut2Btn:
//Put Your Code Here
break; 
case R.id.cut3Btn:
//Put Your Code Here
break;
case R.id.cut4Btn:
//Put Your Code Here
break;
case R.id.cut5Btn:
//Put Your Code Here
break;
}
}

答案 2 :(得分:0)

你可以实现一个开关来做这件事:

  1. 您的类必须实现OnClickListener并覆盖函数OnClick(视图视图)。

  2. 然后在onCreate方法

    上设置OnClickListener(this)

    按钮[1] .setOnClickListener(本)

    按钮[2] .setOnClickListener(本)

    按钮[3] .setOnClickListener(本)

  3. 在覆盖功能上执行开关案例

    @覆盖

    public void onClick(查看v){

    switch (v.getId()) {
        case R.id.button1:
            // button 1 do
            break;
        case R.id.button2:
            // button 2 do
            break;
        case R.id.button3:
            // button 3 do
            break;
    }
    

    }