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?

是的。这是某种回调。