ListActivity 的 onListItemClick() 方法是如何调用的?
how is the onListItemClick() method of ListActivity invoked?
我是编程新手,想知道如何调用 onListItemClick() 方法:
protected void onListItemClick(ListView l, View v, int position, long id){
super.onListItemClick(l, v, position, id)
};
我的问题是,当我们点击调用此方法的列表项时:
是某种系统回调,
是 DVM 负责调用它,
或者它是什么?
My question is that when we click on the list item who calls this
method : is it some kind of System callback, is DVM responsible for
invoking it, or what is it?
如果扩展 Activity
而不是 ListActivity
,ListActivity
会做同样的事情。它注册了一个 AdapterView.OnItemClickListener
的实例,当调用回调的方法时,它会调用您正在覆盖的方法。
Android 是一个开源平台,因此您可以检查 SDK 中的所有 类 以了解它们的工作原理。
检查 AbsListView,它是 ListView 的父级,你会看到这个方法:
@Override
public boolean performItemClick(View view, int position, long id) {
boolean handled = false;
boolean dispatchItemClick = true;
if (mChoiceMode != CHOICE_MODE_NONE) {
handled = true;
boolean checkedStateChanged = false;
if (mChoiceMode == CHOICE_MODE_MULTIPLE ||
(mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL && mChoiceActionMode != null)) {
boolean checked = !mCheckStates.get(position, false);
mCheckStates.put(position, checked);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
if (checked) {
mCheckedIdStates.put(mAdapter.getItemId(position), position);
} else {
mCheckedIdStates.delete(mAdapter.getItemId(position));
}
}
if (checked) {
mCheckedItemCount++;
} else {
mCheckedItemCount--;
}
if (mChoiceActionMode != null) {
mMultiChoiceModeCallback.onItemCheckedStateChanged(mChoiceActionMode,
position, id, checked);
dispatchItemClick = false;
}
checkedStateChanged = true;
} else if (mChoiceMode == CHOICE_MODE_SINGLE) {
boolean checked = !mCheckStates.get(position, false);
if (checked) {
mCheckStates.clear();
mCheckStates.put(position, true);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
mCheckedIdStates.clear();
mCheckedIdStates.put(mAdapter.getItemId(position), position);
}
mCheckedItemCount = 1;
} else if (mCheckStates.size() == 0 || !mCheckStates.valueAt(0)) {
mCheckedItemCount = 0;
}
checkedStateChanged = true;
}
if (checkedStateChanged) {
updateOnScreenCheckedViews();
}
}
if (dispatchItemClick) {
handled |= super.performItemClick(view, position, id);
}
return handled;
}
My question is that when we click on the list item who calls this
method : is it some kind of System callback, is DVM responsible for
invoking it, or what is it?
是的。这是某种回调。
我是编程新手,想知道如何调用 onListItemClick() 方法:
protected void onListItemClick(ListView l, View v, int position, long id){
super.onListItemClick(l, v, position, id)
};
我的问题是,当我们点击调用此方法的列表项时: 是某种系统回调, 是 DVM 负责调用它, 或者它是什么?
如果扩展My question is that when we click on the list item who calls this method : is it some kind of System callback, is DVM responsible for invoking it, or what is it?
Activity
而不是 ListActivity
,ListActivity
会做同样的事情。它注册了一个 AdapterView.OnItemClickListener
的实例,当调用回调的方法时,它会调用您正在覆盖的方法。
Android 是一个开源平台,因此您可以检查 SDK 中的所有 类 以了解它们的工作原理。
检查 AbsListView,它是 ListView 的父级,你会看到这个方法:
@Override
public boolean performItemClick(View view, int position, long id) {
boolean handled = false;
boolean dispatchItemClick = true;
if (mChoiceMode != CHOICE_MODE_NONE) {
handled = true;
boolean checkedStateChanged = false;
if (mChoiceMode == CHOICE_MODE_MULTIPLE ||
(mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL && mChoiceActionMode != null)) {
boolean checked = !mCheckStates.get(position, false);
mCheckStates.put(position, checked);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
if (checked) {
mCheckedIdStates.put(mAdapter.getItemId(position), position);
} else {
mCheckedIdStates.delete(mAdapter.getItemId(position));
}
}
if (checked) {
mCheckedItemCount++;
} else {
mCheckedItemCount--;
}
if (mChoiceActionMode != null) {
mMultiChoiceModeCallback.onItemCheckedStateChanged(mChoiceActionMode,
position, id, checked);
dispatchItemClick = false;
}
checkedStateChanged = true;
} else if (mChoiceMode == CHOICE_MODE_SINGLE) {
boolean checked = !mCheckStates.get(position, false);
if (checked) {
mCheckStates.clear();
mCheckStates.put(position, true);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
mCheckedIdStates.clear();
mCheckedIdStates.put(mAdapter.getItemId(position), position);
}
mCheckedItemCount = 1;
} else if (mCheckStates.size() == 0 || !mCheckStates.valueAt(0)) {
mCheckedItemCount = 0;
}
checkedStateChanged = true;
}
if (checkedStateChanged) {
updateOnScreenCheckedViews();
}
}
if (dispatchItemClick) {
handled |= super.performItemClick(view, position, id);
}
return handled;
}
My question is that when we click on the list item who calls this method : is it some kind of System callback, is DVM responsible for invoking it, or what is it?
是的。这是某种回调。