问题1:不幸的是,您所说的最直观的是Android中使用最少的一个。据我了解,您应该将UI(XML)和计算功能(Java类文件)分开。它还使调试更加容易。通过这种方式阅读并思考Android imo实际上要容易得多。
问题2:我相信主要使用的两个是#2和#3。我将以Button clickButton为例。
2
是匿名类的形式。
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***
}
});
这是我的最爱,因为它在使用findViewById设置按钮变量的位置旁边具有onClick方法。处理此clickButton按钮视图的所有内容都位于此处,看起来非常整洁。
我的同事评论的一个缺点是,假设您有许多需要onclick侦听器的视图。您会看到onCreate的长度将非常长。因此,他为什么喜欢使用:
3
假设您有5个clickButton:
确保您的活动/片段实现了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
}
}
正如我的同事所解释的那样,这种方式在他眼中更加整洁,因为所有onClick计算都在一个地方进行处理,而不会占用onCreate方法。但是我看到的缺点是:
- 看自己
- 并且onClick方法使用的onCreate中可能位于的其他任何对象都必须放入字段中。
让我知道您是否需要更多信息。我没有完全回答您的问题,因为这是一个很长的问题。如果我找到一些站点,我将扩大答案,现在,我只是在提供一些经验。