IT이야기

GetView VS 사용자 지정 CursorAdapter의 BindView

cyworld 2021. 4. 18. 10:26
반응형

GetView 대. 사용자 지정 CursorAdapter의 BindView?


그래서 저는이 비디오 http://www.youtube.com/watch?v=N6YdwzAvwOA를 보고 있으며 Romain Guy는이 방법을 사용하여보다 효율적인 UI 어댑터 코드를 만드는 방법을 보여줍니다 getView(). CursorAdapters에도 적용됩니까? 현재 bindView()newView()내 사용자 지정 커서 어댑터를 사용 하고 있습니다. 대신 getView를 사용해야합니까?


CursorAdapter행 재활용 패턴을 적용하는 방식으로 및에 getView()대리자를 구현 합니다. 따라서 및을 재정의하는 경우 행 재활용에 대해 특별한 작업을 수행 할 필요가 없습니다 .newView()bindView()CursorAdapternewView()bindView()


/**
     * @see android.widget.ListAdapter#getView(int, View, ViewGroup)
     */
    public View getView(int position, View convertView, ViewGroup parent) {
        if (!mDataValid) {
            throw new IllegalStateException("this should only be called when the cursor is valid");
        }
        if (!mCursor.moveToPosition(position)) {
            throw new IllegalStateException("couldn't move cursor to position " + position);
        }
        View v;
        if (convertView == null) {
            v = newView(mContext, mCursor, parent);
        } else {
            v = convertView;
        }
        bindView(v, mContext, mCursor);
        return v;
    }

이 CursorAdapter 소스 코드는 분명히 cursorAdapter가 더 많이 작동합니다.


CursorAdapter처럼 구현은 하위 클래스라는 일반 어댑터 다른 BaseAdapter재정의 할 필요가 없습니다, getView(), getCount(), getItemId()그 정보가 커서 자체에서 검색 할 수 있기 때문이다.

주어진 경우 하위 클래스 Cursor를 만들려면 두 가지 메서드 만 재정의하면됩니다 CursorAdapter.

bindView() : 주어진 뷰가 제공된 커서에 데이터를 표시하도록 업데이트합니다.

newView() : 이것은 목록에 들어가는 새로운 뷰를 구성하기 위해 호출됩니다.

CursorAdapter( getView()일반적인 방법 과 달리) 재활용 뷰를 처리합니다 Adapter. newView()새 행이 필요할 때마다 호출하지 않습니다 . 이미 View(아님 null)이 있으면을 직접 호출합니다 bindView(). 이렇게하면 생성 된 뷰가 재사용됩니다. 각 뷰의 생성 및 채우기를이 두 가지 방법으로 분할함으로써 CursorAdapter일반 어댑터에서와 같이이 두 가지가 모두 getView()메서드 에서 수행되는 뷰 재사용을 달성합니다 .

참조 URL : https://stackoverflow.com/questions/3535074/getview-vs-bindview-in-a-custom-cursoradapter

반응형