我的应用程序目前有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?如果是的话,有关我如何做到这一点的任何建议吗?
谢谢!
答案 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)
你可以实现一个开关来做这件事:
您的类必须实现OnClickListener并覆盖函数OnClick(视图视图)。
然后在onCreate方法
上设置OnClickListener(this)按钮[1] .setOnClickListener(本)
按钮[2] .setOnClickListener(本)
按钮[3] .setOnClickListener(本)
在覆盖功能上执行开关案例
@覆盖
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;
}
}