Bud*_*dda 88 java android android-button onclicklistener
我在非Java和非Android领域拥有丰富的经验,我正在学习Android.
我对不同领域有很多困惑,其中之一就是如何处理按钮点击.至少有4种方法(!!!),这里简要列出
为了保持一致性,我将列出它们:
View.OnClickListener在活动中拥有该类的成员,并将其分配给将onClick在onCreateactivity方法中处理逻辑的实例.
在'onCreate'活动方法中创建'onClickListener'并使用setOnClickListener将其分配给按钮
在活动本身中实现'onClickListener'并将'this'指定为按钮的监听器.对于活动按钮很少的情况,应该分析按钮ID以执行适当按钮的'onClick'处理程序
对实现'onClick'逻辑的活动有公共方法,并将其分配给activity xml声明中的按钮
问题#1:
这些都是方法,还有其他选择吗?(我不需要任何其他的,只是好奇)
对我来说,最直观的方式是最新的方式:它需要输入最少量的代码并且是最可读的(至少对我而言).
虽然,我没有看到这种方法被广泛使用.使用它有什么用处?
问题2:
每种方法的优缺点是什么?请分享您的经验或良好的链接.
欢迎任何反馈!
PS我试过谷歌并找到了一些关于这个话题的东西,但我发现的唯一的东西就是描述"如何"做到这一点,而不是为什么它好或坏.
Dog*_*n C 136
问题1:不幸的是,你说的最直观的是Android中使用最少的.据我所知,您应该分离UI(XML)和计算功能(Java类文件).它还使调试更容易.通过这种方式阅读并考虑Android imo实际上要容易得多.
问题2:我认为主要使用的是#2和#3.我将使用Button clickButton作为示例.
是一个匿名类的形式.
Button clickButton = (Button) findViewById(R.id.clickButton);
clickButton.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
***Do what you want with the click here***
}
});
Run Code Online (Sandbox Code Playgroud)
这是我最喜欢的,因为它的onClick方法就在使用findViewById设置按钮变量的旁边.处理此clickButton Button View的所有内容都位于此处,看起来非常整洁.
我的同事评论的一个骗局是,想象你有很多需要onclick听众的观点.你可以看到你的onCreate的篇幅会很长.这就是他喜欢使用的原因:
说你有,5 clickButtons:
确保您的Activity/Fragment实现OnClickListener
// in OnCreate
Button mClickButton1 = (Button)findViewById(R.id.clickButton1);
mClickButton1.setOnClickListener(this);
Button mClickButton2 = (Button)findViewById(R.id.clickButton2);
mClickButton2.setOnClickListener(this);
Button mClickButton3 = (Button)findViewById(R.id.clickButton3);
mClickButton3.setOnClickListener(this);
Button mClickButton4 = (Button)findViewById(R.id.clickButton4);
mClickButton4.setOnClickListener(this);
Button mClickButton5 = (Button)findViewById(R.id.clickButton5);
mClickButton5.setOnClickListener(this);
// somewhere else in your code
public void onClick(View v) {
switch (v.getId()) {
case R.id.clickButton1: {
// do something for button 1 click
break;
}
case R.id.clickButton2: {
// do something for button 2 click
break;
}
//.... etc
}
}
Run Code Online (Sandbox Code Playgroud)
这种方式,因为我的同事解释他的眼睛更整洁,因为所有onClick计算都在一个地方处理,而不是拥挤onCreate方法.但我看到的缺点是:
如果您想了解更多信息,请与我们联系.我没有完全回答你的问题,因为这是一个很长的问题.如果我找到一些网站,我会扩展我的答案,现在我只是给一些经验.
Luk*_*uth 10
#1当布局上的按钮没有生成时(但显然是静态的),我经常使用最后一个.
如果您在实践中和业务应用程序中使用它,请在此处格外注意,因为当您使用像ProGuard这样的源混淆器时,您需要在活动中标记这些方法,以免被混淆.
要使用此方法归档某种编译时安全性,请查看Android Lint(示例).
#2 所有方法的优缺点几乎相同,教训应该是:
使用最合适或最直观的方式.
如果必须将相同的内容分配OnClickListener给多个按钮实例,请将其保存在类范围内(#1).如果您需要一个简单的Button监听器,请进行匿名实现:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Take action.
}
});
Run Code Online (Sandbox Code Playgroud)
我倾向于不在OnClickListener活动中实现,这有时会让人感到有些困惑(特别是当你实现多个其他事件处理程序而没有人知道this所做的事情时).
我更喜欢选项4,但它对我来说很直观,因为我在Grails,Groovy和JavaFX中做了太多工作.视图和控制器之间的"魔术"连接是共同的.为方法命名很重要:
在视图中,将onClick方法添加到按钮或其他窗口小部件:
android:clickable="true"
android:onClick="onButtonClickCancel"
Run Code Online (Sandbox Code Playgroud)
然后在类中,处理方法:
public void onButtonClickCancel(View view) {
Toast.makeText(this, "Cancel pressed", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
再次,清楚地命名方法,无论如何应该做的事情,维护成为第二性质.
一个很大的优点是您现在可以为该方法编写单元测试.选项1可以做到这一点,但2和3更难.
| 归档时间: |
|
| 查看次数: |
230373 次 |
| 最近记录: |