내 구현 ArrayAdapter
은 아래에있는 데이터의 변경 사항을 수신하는 것과 같습니다. 따라서 데이터의 변경은, 어댑터는 통보과 함수 onObjectStateChanged()
는 데이터의 변화가있을 때마다 호출되는 위의 코드에서 notifydataSetChanged()
어댑터 내부에서 notifyDataSetChanged() 호출
public class MyAdapter extends ArrayAdapter implements ObjectStateListener {
@Override
public void onObjectStateChanged() {
/*Call appropriate functions as the underlying data as changed.
A good way of doing that would be to retrieve only the positions of the filtered values
so that the original dataholder can be used but display only certain indices
*/
Log.v(TAG, "FilterCriteria changed. Trigger fired");
this.filterPositions = Helper().getFilteredPositions(filterCriteria, mAppartments);
Log.v(TAG, "CALLING NOTIFYDATASETCHANGED()...");
notifyDataSetChanged();
Log.v(TAG, "FINISHED CALLING NOTIFY DATASET CHANGED");
}
}
를 호출하고 다시는 notifyDataSetChanged()
를 호출한다. onObjectStateChanged()
이 올바르게 호출되는지 테스트하려면, 내가 볼 수있는 것처럼 많은 수의 Log 문을 넣었다. 모든 로그가 logcat에 나타납니다. 그러나 getView()
은 notifyDataSetChanged()
을 호출 한 후에 호출되지 않으므로 목록보기가 새로 고쳐지지 않습니다.
왜 이런 일이 발생합니까? notifyDataSetChanged()
은 getView()
이 호출되고 새 데이터가 ListView 권한에 반영되도록해야합니까?
정의는 삭제하거나 목록에 새 값을 삽입하는 경우 ObjectStateChangeListener
public interface ObjectStateListener {
public void onObjectStateChanged();
public void listenForStateChange(Object o);
}
UI 스레드에서'onObjectStateChanged'를 호출하고 있습니까? – Rohit5k2
@ Rohit5k2 : 예, 그렇지 않은 경우 예외가 발생합니다. – Ashwin
ObjectStateListener의 정의는 무엇입니까? –