我有一个按钮可以从一些编辑文本中获取文本,并根据从微调器中选择的选项对它们进行一些计算,因此有很多代码在Click上我需要使用它3次< / p>
目前我的代码看起来像这样
if (getIntent().hasExtra("blk")) {
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// a lot of code here
}
});
} else if (getIntent().hasExtra("Length")) {
edtNumber1.setText(setLength + "");
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// do the same here
}
});
} else if (getIntent().hasExtra("Height")) {
edtNumber2.setText(setHeight + "");
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// do the same here
}
});
如何缩短此代码,我发现自己这样做了很多重复相同的代码
答案 0 :(得分:3)
您可以让ActivityClass实现View.OnClickListener()
现在,每个按钮组onClickListener()
为 - &gt;
btn.setOnClickListener(this)
将onClickListener实现为 - &gt;
@Override
public void onClick(View v) {
//Do common work here and if you want to do different work then ->
switch(v.getId())
{
case R.id.btn:
//TODO Code
break;
case R.id.something:
break;
}
}
答案 1 :(得分:2)
正如评论中提到的@Luksprog,创建一个可以重用的方法:
private void doALotOfWork() {
// do a lot of work here
}
并随时随地拨打电话:
@Override
public void onClick(View v) {
doALotOfWork();
}
答案 2 :(得分:2)
您可以修改您的活动以实施OnClickListener
并适当覆盖onClick()
。
然后你只需要拨打btn.setOnClickListener(this);
,你只需要拨打一次。
如果您有许多调用Activity的onClick方法的视图,则可以在view.getId()
上进行切换。
答案 3 :(得分:2)
如果您不想实现接口,请使用方法执行此操作。
setButtonListener(Button btn) {
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
whenButtonGetsClicked();
}
});
}
whenButtonGetsClicked(){
//do your magic
}
但是,我建议使用接口按照Tanix.7x
的描述进行操作答案 4 :(得分:1)
对我来说最直接的方式:
OnClickListener buttonListener=new OnClickListener() {
@Override
public void onClick(View arg0) {
// a lot of code here
}
}
if (getIntent().hasExtra("blk")) {
btn.setOnClickListener(buttonListener);
} else if (getIntent().hasExtra("Length")) {
edtNumber1.setText(setLength + "");
btn.setOnClickListener(buttonListener);
} else if (getIntent().hasExtra("Height")) {
edtNumber2.setText(setHeight + "");
btn.setOnClickListener(buttonListener);
}
虽然如果案例稍微复杂一些(例如我想要非常相似的参数化功能),通常最好使用实现OnClickListener的内部类。
答案 5 :(得分:1)
要缩短代码,请实施 OnClickListener 并添加未实现的方法。
对于每个按钮,设置您的事件处理程序如下:
btn.setOnClickListener(this);
返回 onClick()方法,执行以下操作:
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.btn:
//TODO Code
break;
case R.id.btn2:
break;
}
}
这可以解决您的问题。