Android 의 디자인 모드 - DataSetObservable 관찰자 모드
5467 단어 android
public void setAdapter(ListAdapter adapter) {
。。。
//AdapterDataSetObserver ListView AdapterView
mDataSetObserver = new AdapterDataSetObserver();
mAdapter.registerDataSetObserver(mDataSetObserver); //
。。。
requestLayout();//
}
ListAdapter 는 인터페이스 로 BaseAdapter 가 계승 했다.notifyDataSetChanged 방법 은 어댑터 의 내용 이 바 뀌 었 을 때 getView 를 강제로 호출 하여 각 항목 의 내용 을 새로 고 쳐 야 할 경우 컨트롤 을 다시 그립 니 다 (초기 상태 로 복원).notifyDataSetInvalidated 는 데이터 세트 모니터링 이 바 뀌 는 상황 을 발견 할 때마다 이 데이터 세트 가 더 이상 유효 하지 않 으 면 이 방법 을 사용 하여 현재 보 이 는 영역 을 다시 그립 니 다.
public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
private final DataSetObservable mDataSetObservable = new DataSetObservable();
public void registerDataSetObserver(DataSetObserver observer) {
mDataSetObservable.registerObserver(observer);
}
public void unregisterDataSetObserver(DataSetObserver observer) {
mDataSetObservable.unregisterObserver(observer);
}
/**
* Notifies the attached observers that the underlying data has been changed
* and any View reflecting the data set should refresh itself.
*/
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}
/**
* Notifies the attached observers that the underlying data is no longer valid
* or available. Once invoked this adapter is no longer valid and should
* not report further data set changes.
*/
public void notifyDataSetInvalidated() {
mDataSetObservable.notifyInvalidated();
}
}
DataSetObservable 정 의 는 다음 과 같 습 니 다.
public class DataSetObservable extends Observable<DataSetObserver> {
public void notifyChanged() {
synchronized(mObservers) {
for (int i = mObservers.size() - 1; i >= 0; i--) {
mObservers.get(i).onChanged();
}
}
}
public void notifyInvalidated() {
synchronized (mObservers) {
for (int i = mObservers.size() - 1; i >= 0; i--) {
mObservers.get(i).onInvalidated();
}
}
}
}
여기 mObserver. get (i) 은 사실상 우리 ListView 의 AdapterDataSetObserver 입 니 다. AdapterDataSetObserver (AbListView 에서) 를 살 펴 보 겠 습 니 다.
class AdapterDataSetObserver extends AdapterView<ListAdapter>.AdapterDataSetObserver {
public void onChanged() {
super.onChanged();
if (mFastScroller != null) {
mFastScroller.onSectionsChanged();
}
}
public void onInvalidated() {
super.onInvalidated();
if (mFastScroller != null) {
mFastScroller.onSectionsChanged();
}
}
}
android \ widget \ FastScroller. java 코드 보기
public void onSectionsChanged() {
mListAdapter = null;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.