>

어댑터 사용 방법을 이해하는 데 혼란이 있습니다. 따라서 사용자 정의 ArrayAdapter 클래스 내부의 생성자는 사용자 정의 BaseAdapter 클래스 내부의 생성자와 약간 다르므로 어떻게 발생할 수 있는지 이해할 수 없습니다. 여기 사용자 정의 ArrayAdapter 클래스 생성자가 있습니다;

private class TaskAdapter extends ArrayAdapter<Task>{
    TaskAdapter(ArrayList<Task> tasks){
        super(TaskListActivity.this, R.layout.task_list_row,R.id.task_item_name, tasks);
    }

여기에 사용자 정의 BaseAdapter 클래스 생성자가 있습니다.

private class FieldsAdapter extends BaseAdapter{
ArrayList<String> emails;
ArrayList<String> phoneNumbers;
FieldsAdapter(ArrayList<String> phoneNumbers,ArrayList<String> emails){
this.phoneNumbers = phoneNumbers;
this.emails = emails;
}

BaseAdapter 클래스 생성자가 왜 그렇게 다른가? 어댑터를 별도의 객체에 저장하고 해당 객체로 ListView 어댑터를 설정하면 TaskAdapter 객체가 현재 컨텍스트, 복사하려는 레이아웃 및 알고있는 것과 같은 모든 특정 정보를 알 필요가없는 이유는 무엇입니까? 해당 레이아웃을 채우려는 ArrayList, 즉이 TaskListActivity.this, R.layout.task_list_row,R.id.task_item_name, tasks ? 그것은 모두 조금 혼란 스럽습니다. 어댑터의 전체 목적은 더 이상 의미가 없습니다. 설명해 주시겠습니까?

  • 답변 # 1

    주된 이유는 ArrayAdapter   BaseAdapter 의 자식 클래스입니다 . BaseAdapter는 전달하는 데이터 수집 유형을보다 자유롭게 정의 할 수 있습니다.
    예를 들어, ArrayAdapter 옆에 우리는 CursorAdapter SimpleAdapter  그것은 또한 BaseAdapter 에서 확장
    참조 :

    https://developer.android.com/reference/android/widget/BaseAdapter.html

    https://developer.android.com/reference/android/widget/ArrayAdapter.html

관련 자료

  • 이전 email - CQRS의 비정규 화 된보기에서 메일 알림
  • 다음 컨트롤러와 일치하는 경로가없는 레일