2013-08-15 1 views
2

나는 그 속에 깊숙이 파고 들었지만 비슷한 질문을하는 다른 사람들을 찾았음에도 불구하고 나는 가지고있는 동일한 문제를 해결하는 질문을 아직 찾지 못했다. 나는 만족스러운 답을 찾지 못했습니다.라이브 업데이트 목록보기

나는 ListView를 가지고있다. .notifyDataSetChanged 어댑터에서 호출하면 ListView가 업데이트되지만 onResume()이 한 번 호출되면 업데이트가 표시됩니다. 다른 말로하면, 나는 활동과 컴백을 떠나야 만 즉시 그것을 보지 못한다.

즉시 업데이트를 확인하려면 어떻게해야합니까? .notifyDataSetChanged 메서드를 시도했지만 어댑터를 재설정하려고 시도했지만 아무 것도 작동하지 않았습니다.

+1

몇 가지 코드를 게시 할 수 있습니까? – kvh

+0

어댑터를 채우는 데이터의 출처는 어디입니까? 어댑터 자체에 반드시 내용을 어댑터에 추가 한 후에는 notifyDataSetChanged를 호출해야합니다. – Rarw

+0

코드를 게시하지 않아 죄송합니다. 비공개 계약을 맺고 있습니다. Rarw, 처음에는 어댑터에 데이터를 제공하는 고정 길이의 배열을 가지고 있습니다. 그런 다음 어댑터를 목록에 추가합니다. 그런 다음 사용자가 배열에 요소를 추가 할 수 있습니다. 내가 원하는 것은 사용자가 버튼을 클릭하자마자 ListView가 업데이트되도록하는 것입니다. –

답변

1

귀하의 의견에 따르면 어댑터의 배열은 업데이트하지 않지만 어댑터에 한 번 전달한 활동은 배열을 유지합니다. 그건 왜 어댑터가 제대로 업데이 트되지 않습니다. 어댑터 클래스와 다른 배열을 변경하고 있습니다.이 배열은 어댑터가 사용하는 것과 동일한 배열 객체가 아닐 수도 있습니다. onResume()에서 어댑터가 새 배열로 다시 만들어지고 새 내용이 표시됩니다. 새 배열에

활동에서 그런
class MyAdapter extends BaseAdapter { 

    private Array[] myArray; 

    public MyAdapter(Array[] myArray) { 
     this.myArray = myArray; 
    } 

    public updateContent(Array[] myNewArray) { 
     this.myArray = myNewArray; 
     this.notifyDataSetChanged(); 
    } 

    // your getItem, getView, and so on methods 
} 

, 간단한 전화 myArray.updateContent을() 그리고 immediatly 업데이트됩니다

해결책은 다음과 같은 사용자 정의 어댑터 클래스를 사용하는 것입니다.


하나의 클래스 (어댑터)에서 사용 된 객체를 다른 하나 (활동) 내에서 유지하고 조작하는 것이 결코 바람직하지 않습니다. 배열을 조작하는 모든 코드를 어댑터로 옮기고 메소드를 사용하여 항목을 추가/제거하십시오. 이렇게하면 이런 종류의 오류를 쉽게 찾을 수 있습니다!

+1

하나님, 사랑해 !! 나는 같은 문제를 겪고 있었고 나는 희망을 거의 잃어 버렸다. 정말 고마워! :디 – Radu