Android GridView的方法setAdapter如何工作?

时间:2013-07-25 08:02:27

标签: android android-gridview

我试图找出Android Adapter如何与AdapterView相关联。但我不明白以下代码:

@Override
public void setAdapter(ListAdapter adapter) {
    if (mAdapter != null && mDataSetObserver != null) {
        mAdapter.unregisterDataSetObserver(mDataSetObserver);
    }

    resetList();
    mRecycler.clear();        
    mAdapter = adapter;

    mOldSelectedPosition = INVALID_POSITION;
    mOldSelectedRowId = INVALID_ROW_ID;

    // AbsListView#setAdapter will update choice mode states.
    super.setAdapter(adapter);

    if (mAdapter != null) {
        mOldItemCount = mItemCount;
        mItemCount = mAdapter.getCount();
        mDataChanged = true;
        checkFocus();

        mDataSetObserver = new AdapterDataSetObserver();
        mAdapter.registerDataSetObserver(mDataSetObserver);

        mRecycler.setViewTypeCount(mAdapter.getViewTypeCount());

        int position;
        if (mStackFromBottom) {
            position = lookForSelectablePosition(mItemCount - 1, false);
        } else {
            position = lookForSelectablePosition(0, true);
        }
        setSelectedPositionInt(position);
        setNextSelectedPositionInt(position);
        checkSelectionChanged();
    } else {
        checkFocus();            
        // Nothing selected
        checkSelectionChanged();
    }

    requestLayout();
}

我不知道变量mAdapter来自哪里,我不明白为什么这个方法中的代码无法点击与Eclipse中的关联方法相关联,它们是否实现于 原生方法?

1 个答案:

答案 0 :(得分:0)

mAdapter是从父类继承的:android.widget.AbsListView。 它们不是本机代码,我认为这是Eclipse问题,因为无法单击以转到相应的方法。