我在互联网上搜索并在Google Android Help Centre
上读出文件,但是现在我还不清楚两者之间的区别以及何时会在什么情况下使用它?
我经历了堆栈溢出没有找到任何详细的答案。
serviceListViewProviderPage.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}
});
和
serviceListViewProviderPage.setOnItemClickListener(this);
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}
先谢谢
答案 0 :(得分:3)
两者都是相同的但不同的声明和用法。首先,让我们看看我们在做什么。
下面:
view.setOnItemClickListener(Listener);
您正在视图中设置监听器。
之后,您必须覆盖onItemClick
界面的OnItemClickListener
方法,以便遵循提供的合同并对项目点击进行操作。
现在看看你的代码示例:
第一种情况
// set a listener to your wiew
serviceListViewProviderPage.setOnItemClickListener(
// create a new OnItemClickListener
new AdapterView.OnItemClickListener() {
@Override
//
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}
});
在此处,您将侦听器设置为您的视图时将其声明为匿名内部类。
PROS:
<强> CONS:强>
interface
有很多方法,你将失去可读性Listener
第二案例
要了解第二个,您必须看到代码必须位于实现View
的{{1}}内,这就是为什么您可以使用AdapterView.OnItemClickListener
this
但是,只要您必须遵循接口的约定,该类必须实现该方法:
// here you set the class itself as a listener
serviceListViewProviderPage.setOnItemClickListener(this);
PROS:
缺点:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}
成为View
不是我的首选方式,我更喜欢有一个只有Listener
而另一个只有Listener
的课程答案 1 :(得分:0)
OnItemClickListener 是一个接口,接口有一个属性,实现它的类必须实现其未实现的方法(因为接口包含未实现的方法声明)。
&#34;的 serviceListViewProviderPage.setOnItemClickListener(本); 强>&#34; 在上面的语句中,您需要在类及其未实现的方法中实现 OnItemClickListener ,并将您的类引用提供为此引用作为参数。
新的AdapterView.OnItemClickListener() 在上面的陈述中,您使用的是匿名类。
为了更好地理解你应该阅读接口,匿名类概念,这个参考。
答案 2 :(得分:0)
在第一个案例中,您决定将您的界面OnItemClickListener
用作匿名实施(这意味着您可以在那里提供正确的代码,以便一次性使用项目)。
因此,在这种情况下,您可以在调用方法时定义接口实现:
serviceListViewProviderPage.setOnItemClickListener(new AdapterView.OnItemClickListener() {....});
在第二种情况下更简单:
不是编写所有代码一次匿名使用,而是使包含代码implement
的类成为您想要的接口(在本例中为AdapterView.OnItemClickListener
接口)
因此,当你调用方法时,你会通过&#34;这个&#34;作为参数,因为您的类正在实现该方法所需的接口 事实上,您可以直接在类中定义方法:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}
因此你的类实现了接口,你可以调用:
serviceListViewProviderPage.setOnItemClickListener(this);
在评估如何更好地遵循和使用软件开发的最佳实践指南之后,软件开发人员可以自行决定何时何地使用这些表单
希望这有帮助!