我正在构建一个Android应用程序。我已经注意到我在我的每个类中创建了许多与此类似的重复代码:
Button buttonX = (Button)findViewById(R.id.buttonXName);
// Register the onClick listener with the implementation above
buttonX.setOnClickListener(new OnClickListener() {
public void onClick(View v)
{
//DO SOMETHING! {RUN SOME FUNCTION ... DO CHECKS... ETC}
}
});
我现在有15个按钮,这使得我的代码很难看。有没有人有关于如何将所有这些代码转换成更有效的代码的类或示例,这样我就可以:
如果单击并运行每个按钮的特定代码,请为监听器{buttonX.setOnClickListener(new OnClickListener()}
如果有人知道什么,我将不胜感激。
发布于 2011-04-08 07:52:22
如果你的目标是1.6或更高版本,你可以使用android:onClick xml attribute来删除一些重复的代码。参见Romain Guy的this blog post。
<Button
android:height="wrap_content"
android:width="wrap_content"
android:onClick="myClickHandler" />
在Java类中,使用以下代码行:
class MyActivity extends Activity {
public void myClickHandler(View target) {
// Do stuff
}
}
发布于 2011-04-08 07:47:22
在您的活动上实现OnClickListener() ...
public class MyActivity extends Activity implements View.OnClickListener {
}
对于每个按钮使用...
buttonX.setOnClickListener(this);
在您的活动onClick()方法测试中,它是哪个按钮...
@Override
public void onClick(View view) {
if (View.equals(buttonX))
// Do something
}
另外,在onClick中,您可以使用view.getId()来获取资源ID,然后在switch/case块中使用它来标识每个按钮并执行相关的操作。
发布于 2013-05-08 03:16:37
Android lambada解决方案
public void registerButtons(){
register(R.id.buttonName1, ()-> {/*Your code goes here*/});
register(R.id.buttonName2, ()-> {/*Your code goes here*/});
register(R.id.buttonName3, ()-> {/*Your code goes here*/});
}
private void register(int buttonResourceId, Runnable r){
findViewById(buttonResourceId).setOnClickListener(v -> r.run());
}
交换机案例解决方案解决方案
public void registerButtons(){
register(R.id.buttonName1);
register(R.id.buttonName2);
register(R.id.buttonName3);
}
private void register(int buttonResourceId){
findViewById(buttonResourceId).setOnClickListener(buttonClickListener);
}
private OnClickListener buttonClickListener = new OnClickListener() {
@Override
public void onClick(View v){
switch (v.getId()) {
case R.id.buttonName1:
// TODO Auto-generated method stub
break;
case R.id.buttonName2:
// TODO Auto-generated method stub
break;
case View.NO_ID:
default:
// TODO Auto-generated method stub
break;
}
}
};
https://stackoverflow.com/questions/5588804
复制相似问题