0

사용자가 버튼을 클릭하면 새 ListFragment가 표시됩니다. 이 조각에는 연결된 아티스트 이름이있는 앨범 목록이 포함됩니다.리스트 뷰에 표시되도록 비동기 적으로 ArrayList 채우기

나는 name이 앨범의 제목과 artist있는 내 자신의 클래스 AlbumItem (String name, String artist)을 생성 한 해당 아티스트 이름 :

public class AlbumItem { 

    private String AlbumName; 
    private String AlbumArtist; 

    public AlbumItem(){ 
    } 

    public AlbumItem(String name, String artist){ 
     this.AlbumName = name; 
     this.AlbumArtist = artist; 
    } 

    public String getAlbumName() { 
     return AlbumName; 
     } 

    public void setAlbumName(String AlbumName) { 
     this.AlbumName = AlbumName; 
     } 

    public String getAlbumArtist() { 
     return AlbumArtist; 
     } 

    public void setAlbumArtist(String AlbumArtist) { 
     this.AlbumArtist = AlbumArtist; 
     } 
} 

은 그 때 나는 올바른 텍스트 뷰와 앨범의 이름과 아티스트의 이름을 연관 내 사용자 지정 어댑터를 썼다 내 ListView의 행에.

그럼 내가 AlbumItem의 ArrayList를 선언하고 이런 식으로 채울 수 :

1) 나는 적절한 방법을 것인가 :

ArrayList<AlbumItem> arrayList; 
arrayList.add(new AlbumItem ("Album's title", "Artist"); 

가 지금은 몇 가지 질문이? 나는 항상 그런 listviews를 작성하는 법을 배웠고이 기술 (Custom Item class + ArrayList + CustomAdapter)을 사용하는 것이 매우 편하지만 Music Player를하고 있고 앨범 목록을 쿼리하고 싶습니다. 비동기 적으로 목록보기 UI가 차단되지 않습니다. ArrayList에서 데이터를로드하는 방법으로 데이터를로드 할 수 있는지 여부는 알 수 없습니다.

2)이 ArrayList를 비동기 적으로 채우는 방법은 무엇입니까? LoaderManager/CursorLoader 또는 Asyntask 또는 다른 것을 사용합니까? (Android 4.0을 타겟팅 중입니다.)

감사합니다.

+0

목록 작성 장소는 어디입니까? DB? 편물? 그것은 db에서 나는 당신이 실제로 그것을 비동기 적으로 필요하다고 생각하지 않는다. (매우 긴 조작이고 오랜 시간이 걸리며 사용자가 알아 차리지 않는다면 그렇지 않다. AsyncTask : http://developer.android. com/reference/android/os/AsyncTask.html –

+0

최신 API를 대상으로하므로 데이터가 DB에 저장되어 있으면 ListFragment + Loader (CursorLoader)를 사용하는 것이 좋습니다. –

+0

@ Nuno Gonçalves : 앨범을 만들면 비동기로 처리하는 것이 항상 도움이되지 않을 수도 있습니다. 그러나 목록이 너무 길거나 표지의 축소판을 나중에 쿼리하려는 경우 UI가 느려질 위험이 있습니다. – Jecimi

답변

0

CursorLoader는 특히 데이터베이스 또는 다른 로컬 데이터 소스에서 데이터를 가져 오는 경우 목록을로드하는 편리한 방법입니다. 데이터가 네트워크에서 오는 경우 asynctask로 데이터를 가져 와서 목록 어댑터에서로드하는 것이 더 쉽습니다. 이 중 하나에 익숙하다면 사용하십시오.

+0

문제는 CustomAdapter가있는 CursorLoader의 예가 없다는 것이고 CursorLoader를 사용하여 몇 시간 동안 노력해 왔습니다. /. 간단한 Array를 채우는 CursorLoader 예제 만 찾을 수 있다면 ... 먼저 AsyncTask를 시도해보십시오. – Jecimi

+0

@ 제지미 : 그냥 팁. 'CursorLoader'는 여러분의 데이터가'ContentProvider'에 의해 뒷받침됨을 의미합니다. 따라서 ContentProvider를 사용하지 않는다면, 커스텀'AsyncTaskLoader'를 생성하여 DB로부터 데이터를 읽거나'AsyncTask'를 사용하여 AsyncTask.doInBackground()에서 DB의 데이터. –

+0

@Arhimed : 팁 주셔서 감사합니다. 나는 ContentProvider를 사용하지만 CursorLoader는 사용하기에 복잡해서 AsyncTask를 사용하려고합니다. 나는 둘 다 방법을 시도해 볼게. 누구나 간단한 LoaderManager/CursorLoader 예제에 대한 링크를 가지고 있다면, 나는 매우 뜨거울 것이다. – Jecimi