布局上有4个按钮,每个按钮都有属性:
android:onClick="numberChosen"
现在,我计划做的是在我的活动中(使用具有4个按钮的布局),我有类似的东西:
public class Blah extends Activity{
String fileName;
Button one;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_number_players_selection_screen);
one = (Button) findViewById(R.id.number_players_one);
}
public void numberChosen(View v){
if(v == one){ // <-------- first way
System.out.println("first way");
}
if(v.getId()==R.id.number_players_one){ // <-------- second way
System.out.println("second way");
}
}
}
如果你注意方法numberChosen
中发生了什么,在这两种方式之间哪一个更好?或者他们都在做同样的事情?
在旁注上,android:onClick="numberChosen"
是否比仅设置View.onClickListener
更好或更差?
答案 0 :(得分:4)
从我的观点来看,两种方式都是正确的,他们完成了工作。 从性能点来看,第二种方式可能更好。
此外,如某些建议,如果您在库项目中使用ADT 14或更高版本,则可能无法使用开关大小写,因为ID不是最终的(常量),因此在这种情况下,你只能使用if语句。
答案 1 :(得分:3)
我正在使用min SDK 14,并且此解决方案在某些情况下无效(仅适用于我的列表适配器的第一行)
findViewById(R.id.item_icon_favourite) == view
通过与ID进行比较来解决
R.id.item_icon_favourite == view.getId()
答案 2 :(得分:0)
public class Blah extends Activity implements OnClickListener{
String fileName;
Button one;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_number_players_selection_screen);
one = (Button) findViewById(R.id.number_players_one);
one..setOnClickListener(this); // way 1 to do that
// more better way would be customized for whole app
**one..setOnClickListener(new MyClickListener());**
}
/** The click event observer pattern for the different items on the view
*
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.number_players_one:
// best way 1
break;
default :
break;
}
}
}
更自定义的实现,您可以为应用中的不同部分设置自定义侦听器:
public class MyClickListener implements OnClickListener {
private Context mContext;
@Override
public void onClick(View v) {
mContext = v.getContext();
switch (v.getId()) {
case R.id.number_players_one:
// best way 2 and more better among all
break;
default:
break;
}
}
}
答案 3 :(得分:0)
我建议您使用switch
案例,使其更具可读性。无论你使用的android:onClick="numberChosen"
或View.onClickListener()