저는 Android에 비교적 익숙하며 ImageView로 동적으로 생성 된 레이아웃에 비트 맵을로드하는 앱에서 작업합니다. 레이아웃 및 ImageView의 수는 일부 동적 데이터 (예 : API 호출)를 기반으로합니다. 비트 맵을 동적으로 생성하고 주 레이아웃에 추가 한 후에 이러한 이미지 뷰에 비트 맵을로드하려고합니다. 다중 동적 레이아웃을 만들고 여러 비트 맵을로드 할 것이므로 주 스레드에서 동 기적으로 수행 할 수 없습니다. 나는 현재 AsyncTasks를 기반으로하는 솔루션을 사용하고 있지만 효율적인 방법 (Handler/Runnable 사용 가능)이있을 수 있다고 생각합니다.Android : 비트 맵을 동적보기로 로딩
1) 레이아웃을 메인 스레드
for(Event event : events.getEventList()) {
// Create an UpdateCalendarUITask to update the UI
CalendarUpdateTask calendarTask = new CalendarUpdateTask(this, parentView);
calendarTask.execute(event);
}
2) 만들기에서 첫 AsyncTask를를 시작하고 채 웁니다 (추가 텍스트 :
현재, 나는 다음과 같은 방법으로 AsyncTasks를 사용하는 솔루션을 구현 한 및 이미지 뷰)를 사용하여 새로 만든 동적 뷰를 레이아웃에 추가하고 완료되면 인터페이스를 사용하여 주 스레드에 콜백합니다.
public class CalendarUpdateTask extends AsyncTask<Event, Void, RelativeLayout> {
private final WeakReference<Activity> activityReference;
private final WeakReference<ViewGroup> parentViewReference;
....
public CalendarUpdateTask(Context context, ViewGroup parentView) {
parentViewReference = new WeakReference<ViewGroup>(parentView);
activityReference = new WeakReference<Activity>((Activity) context);
}
@Override
protected RelativeLayout doInBackground(Event... params) {
myEvent = params[0];
return updateGameView(myEvent); // returns created RelativeLayout
}
@Override
protected void onPostExecute(RelativeLayout result) {
super.onPostExecute(result);
// Add the Game/Event view to the Events View
if(// Reference and nulls checks) {
ViewGroup parentView = parentViewReference.get();
parentView.addView(result);
TaskListener listener = (TaskListener) activityReference.get();
listener.loadImages(myEvent);
}
}
....
}
3) 리스너 함수의 loadImages (...)는 this 유사한 비트 맵()
이 확인 작업을로드 다른 AsyncTask를을 시작합니다. 그러나 비트 맵은 뷰가 생성 될 때까지로드되지 않으므로 이미지로드가 약간 느립니다. 이미지 뷰를 만들 때까지 ImageView에 대한 참조가 없으므로 이전에 호출 할 수 없습니다. 주 스레드에서 항상 시작해야하기 때문에 CalendarUpdateTask에서 두 번째 AsyncTask를 시작할 수 없습니다.
이상적으로 두 작업을 동시에 실행하고 비트 맵을 새 ImageView로로드 할 수 있도록 두 작업이 완료되면 알림이 콜백되도록하는 것이 이상적입니다.
올바른 옵션이 더 정확해야합니까? 미리 감사드립니다.
그래, ListView를 살펴 봤는데 이것이 가능한 또 다른 해결책이라고 생각합니다. 나는 기본적으로 RelativeLayouts (여러 Text 및 Image 뷰 포함)을 ScrollView에 삽입하기 때문에 사용자 지정 개체로 ListView가 필요하다고 생각합니다. 그 일을하는 방법에 대한 모범이 있습니까? – Xitij
죄송합니다. 공유 할 수있는 예가 없습니다. XML 레이아웃과 어댑터 (가능하면 Loader)를 사용하여 이미지를 직접 가져옵니다.
Adapter
또는 기타 리소스에 대한 GoogleIO의 협상 중 일부를 살펴보면 많은 정보가 있습니다. –각 "항목"보기에 대한 사용자 지정 레이아웃이있는 ListView를 활용하여 살펴본 결과 내가 사용하고있는 것입니다. 도와 주셔서 감사합니다. – Xitij