android 中的基本代码阅读
basic Code reading in android
这是 android 应用程序项目的一部分,我有这段代码 我无法理解 setOnItemClickListener 将 (AdapterView.OnItemClickListener listener) 作为参数,但其他方法 void onItemClick 也是在参数 space 中。我无法理解 AdapterView.OnItemClickListener() 的对象如何 calling/using onItemClick ?
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
String forecast = mForecastAdapter.getItem(position);
Intent intent = new Intent(getActivity(), MainActivity2Activity.class)
.putExtra(Intent.EXTRA_TEXT, forecast);
startActivity(intent);
}
})
你必须熟悉匿名classes。
new AdapterView.OnItemClickListener(){...}
创建新的未命名(匿名)class 实现 AdapterView.OnItemClickListener
侦听器。
在括号内,您只需从接口实现方法。
new AdapterView.OnItemClickListener() {...}
是 anonymous class. This is just a shortcut to implelenting AdapterView.OnItemClickListener
interface and overriding onItemClick
method manually (it is an abstract method) 的示例,然后实例化它并将对它的引用传递给 setOnItemClickListener
方法。在不使用匿名 class 的情况下,代码如下所示:
class MyOnItemClickListener implements AdapterView.OnItemClickListener{
/**
* Callback method to be invoked when an item in this AdapterView has
* been clicked.
* <p/>
* Implementers can call getItemAtPosition(position) if they need
* to access the data associated with the selected item.
*
* @param parent The AdapterView where the click happened.
* @param view The view within the AdapterView that was clicked (this
* will be a view provided by the adapter)
* @param position The position of the view in the adapter.
* @param id The row id of the item that was clicked.
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//your code here
}
}
然后将其实例化并将其分配给您的 list view
:
MyOnItemClickListener clickListener = new MyOnItemClickListener();
listView.setOnItemClickListener(clickListener);
这不是真正的 Android 问题 - 它是更基础的 Java 语法主题。你指的是Anonymous Class。
setOnItemClickListener
方法接受 AdapterView.OnItemClickListener
对象作为参数。所以为了调用 setOnItemClickListener
你需要一个这样的监听器的实例。获得这样一个实例的一种方法是创建一个。
考虑以下示例:
class MyAwesomeListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
//my awesome click handling logic
}
}
.........
MyAwesomeListener listener = new MyAwesomeListener();
listView.setOnItemClickListener(listener);
我在这里创建了一个自定义 class class 实现了 AdapterView.OnItemClickListener
接口。由于它是 AdapterView.OnItemClickListener
的实例,我可以将此实例作为方法参数传递给 setOnItemClickListener
方法。
作为替代方案,我可以这样调用 setOnItemClickListener
:
listView.setOnItemClickListener(new MyAwesomeListener());
在这种情况下,我不需要创建额外的变量。
但您可以走得更远 - 您可以通过使用匿名 class:
来避免创建实现 AdapterView.OnItemClickListener
的自定义 class
listView.setOnItemClickListener(new AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
//my awesome click handling logic
}
);
所以在这种情况下,我在设置侦听器时创建了 AdapterView.OnItemClickListener
的自定义实现。所以这只是上述两种方法的简化版本。
这是 android 应用程序项目的一部分,我有这段代码 我无法理解 setOnItemClickListener 将 (AdapterView.OnItemClickListener listener) 作为参数,但其他方法 void onItemClick 也是在参数 space 中。我无法理解 AdapterView.OnItemClickListener() 的对象如何 calling/using onItemClick ?
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
String forecast = mForecastAdapter.getItem(position);
Intent intent = new Intent(getActivity(), MainActivity2Activity.class)
.putExtra(Intent.EXTRA_TEXT, forecast);
startActivity(intent);
}
})
你必须熟悉匿名classes。
new AdapterView.OnItemClickListener(){...}
创建新的未命名(匿名)class 实现 AdapterView.OnItemClickListener
侦听器。
在括号内,您只需从接口实现方法。
new AdapterView.OnItemClickListener() {...}
是 anonymous class. This is just a shortcut to implelenting AdapterView.OnItemClickListener
interface and overriding onItemClick
method manually (it is an abstract method) 的示例,然后实例化它并将对它的引用传递给 setOnItemClickListener
方法。在不使用匿名 class 的情况下,代码如下所示:
class MyOnItemClickListener implements AdapterView.OnItemClickListener{
/**
* Callback method to be invoked when an item in this AdapterView has
* been clicked.
* <p/>
* Implementers can call getItemAtPosition(position) if they need
* to access the data associated with the selected item.
*
* @param parent The AdapterView where the click happened.
* @param view The view within the AdapterView that was clicked (this
* will be a view provided by the adapter)
* @param position The position of the view in the adapter.
* @param id The row id of the item that was clicked.
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//your code here
}
}
然后将其实例化并将其分配给您的 list view
:
MyOnItemClickListener clickListener = new MyOnItemClickListener();
listView.setOnItemClickListener(clickListener);
这不是真正的 Android 问题 - 它是更基础的 Java 语法主题。你指的是Anonymous Class。
setOnItemClickListener
方法接受 AdapterView.OnItemClickListener
对象作为参数。所以为了调用 setOnItemClickListener
你需要一个这样的监听器的实例。获得这样一个实例的一种方法是创建一个。
考虑以下示例:
class MyAwesomeListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
//my awesome click handling logic
}
}
.........
MyAwesomeListener listener = new MyAwesomeListener();
listView.setOnItemClickListener(listener);
我在这里创建了一个自定义 class class 实现了 AdapterView.OnItemClickListener
接口。由于它是 AdapterView.OnItemClickListener
的实例,我可以将此实例作为方法参数传递给 setOnItemClickListener
方法。
作为替代方案,我可以这样调用 setOnItemClickListener
:
listView.setOnItemClickListener(new MyAwesomeListener());
在这种情况下,我不需要创建额外的变量。
但您可以走得更远 - 您可以通过使用匿名 class:
来避免创建实现AdapterView.OnItemClickListener
的自定义 class
listView.setOnItemClickListener(new AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
//my awesome click handling logic
}
);
所以在这种情况下,我在设置侦听器时创建了 AdapterView.OnItemClickListener
的自定义实现。所以这只是上述两种方法的简化版本。