2015-01-27 5 views
1

내 구현 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); 
} 
+0

UI 스레드에서'onObjectStateChanged'를 호출하고 있습니까? – Rohit5k2

+0

@ Rohit5k2 : 예, 그렇지 않은 경우 예외가 발생합니다. – Ashwin

+0

ObjectStateListener의 정의는 무엇입니까? –

답변

-1

의 다음 어댑터 목록 notifystatechange의 변화() 바로 삽입하거나 값을 삭제 한 후 소위 될 것이다있을 때마다 notifystatechange()를 호출하면 listview가 새로 고쳐집니다.

+0

현재 구현의 문제점은 무엇입니까? – Ashwin

+1

@Pranav : 방금 문제를 해결하지 않고 방금 방법을 사용자에게 알리는 것입니다. 도움이되지 않습니다. – Rohit5k2

-1

내 AutoCompleTextViews에서 notifyDataSetChanged() 사용을 중지해야했기 때문에 새로 고침되지 않습니다. 난 그냥 어댑터의 로컬 복사본을 유지하고 변경되면 새 데이터 세트로 재설정.

은 ArrayAdapter와이 변화 (기본값입니다)에 알리도록 설정되어 있는지 확인하고 기술적으로도 문서 기준) notifyDataSetChanged (해당 통화를 할 필요가 없습니다 : http://developer.android.com/reference/android/widget/ArrayAdapter.html

-1

먼저 업데이트 데이터를 어댑터에서 참조로 유지 한 다음 notifyDataSetChanged()를 호출하십시오. 새 데이터도 전달해야합니다.

+2

이것은 주석이어야합니다. – Rohit5k2

+0

@ Rohit5k2 이것은 코멘트가 아니 었습니다. –

관련 문제