어댑터 기본 설명


이 섹션 소개

이 섹션의 시작 부분부터 설명할 UI 컨트롤은 모두 어댑터와 관련이 있습니다. 이 어댑터를 사용하는 방법을 이해하고 배우는 것이 중요합니다. 어댑터는 데이터를 채우는 데 사용되는 중간 브리지입니다. 간단히 말해서 다양한 데이터를 적절한 형식으로 뷰에 표시합니다. 사용자에게 보여주세요!


1. MVC 패턴의 간단한 이해

Adapter를 배우기 전에 MVC 패턴의 개념을 이해해야 합니다. 예: 대규모 상용 프로그램은 일반적으로 여러 사람이 개발합니다. 예를 들어, 운영 인터페이스의 계획과 설계를 담당하는 사람이 있습니다. 프로그램 코드 작성을 담당하는 사람이 있습니다. 프로그램 프로젝트의 작업을 분할하려면 프로그램 구조에 적절한 배치를 해야 합니다. 인터페이스 설계와 수정이 모두 프로그램 코드 변경과 관련된 경우 둘 사이의 작업 분담으로 인해 구현이 어려워집니다. 좋은 프로그램 설계자는 그림과 같이 전체 프로그램 프로젝트를 세 부분으로 나눕니다.

1.png

관계 다이어그램 분석:

  • 모델: 일반적으로 코어 실행을 담당하는 데이터로 이해될 수 있습니다. 프로그램 운영 판단 로직으로 조회를 통해 사용자 확보 입력 데이터는 데이터베이스에서 관련 정보를 쿼리하고 최종적으로 계산 및 판단이 이루어진 다음 그 결과가 표시용 뷰에 제공됩니다
  • view: 직설적으로 말하면 사용자의 조작 인터페이스는 어떤 인터페이스를 사용해야 하는지 GUI 컴포넌트, 컴포넌트 간의 배열 위치 및 순서를 설계해야 함
  • Controller: 컨트롤러는 모델과 뷰 사이의 허브로서 프로그램의 실행 흐름을 제어하고 객체 간의 상호 작용

그리고 이 어댑터는 컨트롤러의 중간 부분입니다: Model(data) ---> Controller(표시 방법)---> 인터페이스) 간단한 MVC 컴포넌트에 대한 간단한 이해입니다!

2. 어댑터 개념 분석

공식 문서: Adapter

먼저 상속 구조 다이어그램을 살펴보겠습니다.

2.png위는 어댑터 및 상속 구조 다이어그램이고, 그 다음에는 무엇인지 소개하겠습니다. 실제 개발에 사용되는 어댑터를 구입하세요!

  • BaseAdapter: 추상 클래스입니다. 실제 개발에서는 이 클래스를 상속하고 관련 메소드를 다시 작성합니다.
  • ArrayAdapter: 일반적인 작업을 지원합니다. 가장 간단한 어댑터는 텍스트 한 줄만 표시할 수 있습니다~
  • SimpleAdapter: 확장성이 좋고 여러 효과를 사용자 정의할 수 있는 어댑터입니다!
  • SimpleCursorAdapter: 간단한 텍스트 유형을 표시하는 데 사용되는 ListView는 일반적으로 데이터베이스에서 사용되지만 약간 구식입니다. 권장하지 않습니다!

사실 BaseAdapter 하나만 있어도 재미는 충분합니다. 다른 것들은 실제 개발에서는 많이 사용되지 않습니다~


3. 코드 예:

알겠습니다. 더 이야기하고 코드만 작성하세요. 가장 실용적인 방법은 다음에 몇 가지 간단한 Adapter 인스턴스를 작성하는 것입니다. Adapter가 우리에게 제공하는 편리함을 이해하도록 도와주세요. 또한 Adapter는 ListView와 결합되어야 하기 때문에 GridView 및 기타 컨트롤에 대해 설명하고 일부 고급 사용법은 ListView에 설명되어 있습니다! 다음은 효과에 대한 간단한 데모입니다. 또한 여기에 사용된 컨트롤은 다음 섹션에서 설명할 ListView입니다. 지금은 이해하지 못하더라도 상관없습니다!


1) ArrayAdapter 사용 예:

렌더링 실행:

3.png

코드 구현:

public 클래스 MainActivity는 AppCompatActivity를 확장합니다. {

@Override
protected void onCreate(Bundle saveInstanceState) { ㅋㅋㅋ        { God "," J God "
// arrayadapter 만들기
arrayadapter & lt; string & gt; Adapter = new arrayadapter & lt; string & gt; Ple_expandable_list_item_1, Strs);
// The를 호출하여 목록 보기 객체를 가져옵니다. setAdapter 메소드는 ListView에 대한 어댑터를 설정합니다. list_test = (ListView) findViewById(R.id.list_test);
list_test.setAdapter(adapter);
}
}

몇 가지 관련 사항:

1.배열을 전달하는 것 외에도 배열 리소스 파일에 쓸 수도 있습니다.

예: resvalue 아래에 배열 리소스의 xml 파일 만들기: arrays.xml


<?xml version="1.0" 인코딩="utf-8"?>
<resources>
<string-array name="myarray"> ;
                                               레이아웃의 목록 보기 속성에서 설정합니다. 목록 항목:


<ListView
android:id="@id/list_test"
android:layout_height="match _parent"
android:layout_width="match_parent"

android:entries = "@array/myarray"/>

그렇습니다~

물론 Java 코드에서도 다음과 같이 작성할 수 있습니다.

ArrayAdapter<CharSequence> Adapter = ArrayAdapter.createFromResource(this,
            ㅠㅠ

도 가능해요!

2.
처음에 이 ArrayAdapter는 제네릭을 지원하므로 컬렉션이 필수적이라고 말했습니다. 예를 들어 다음과 같이 작성하세요.

List<String> data = new ArrayList<String>();
data.add ("기본 신");

data.add("B 신");

ArrayAdapter<String> 어댑터 = new ArrayAdapter<String>

                                                                                                 

그렇습니다~

3.ArrayAdapter를 인스턴스화할 때 두 번째 매개변수를 확인했습니다. android.R.layout.simple_expandable_list_item_1사실 이는 다음을 포함하여 시스템에서 제공하는 일부 ListView 템플릿입니다.

simple_list_item_1 : 한 줄의 텍스트 상자

4.png

simple_list_item_2 : 5.png

로 구성된 두 개의 텍스트 상자 simple_list_item_checked: 각 항목은 체크된 목록 항목으로 구성됩니다 6.png

simple_list_item_multiple_choice : 모두 체크박스가 있습니다. 7.png

simple_list_item_single_choice

: 모두 라디오 버튼이 있습니다. 8.png

2)SimpleAdapter 사용 예:

SimpleAdapter: 단순 어댑터, 겉으로는 단순하고 강력해 보이지만 조금만 더 써봐 아래의 복잡한 목록. 펼쳐보세요!

렌더링 실행:

9.png

코드 구현:

먼저 목록에 있는 각 항목의 레이아웃을 작성해 보겠습니다.

list_item.xml

<?xml version="1.0" 인코딩="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width ="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<!-- 아바타 표시를 위한 ImageView 정의 -->
<ImageView
android:id= "@ +id/imgtou"
                                                                                                 > >             LinearLayout                             LinearLayout            android:layout "> android:paddingLeft="8dp"
android:textColor=" #1D1D1C"
         android:layout_height="wrap_content"
          android: paddingLeft="8px"
            android:textColor="#B4B4B9"
            android:textSize="14sp" />

    </LinearLayout>

</LinearLayout>

다음은 MainActivity.java입니다:

public class MainActivity는 AppCompatActivity를 확장합니다. {

private String[] names = new String[]{"B神", "吉神", "CaoShen"};
private String[ ] say = new String[]{"보이지 않는 해킹이 제일 치명적이다", "마스터님 너무 강력하시네요~", "일본개를 제가 이끌겠습니다~"};
private int[] imgIds = new int[]{R .mipmap.head_icon1, R.mipmap.head_icon2, R.mipmap.head_icon3};

@Override
protected void onCreate(Bundle saveInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

List<Map<String, Object>> listitem = new ArrayList<Map<String, Object>>();
for (int i = 0; i < names.length; i++) {
,Object> showitem = new HashMap<String, Object>();
listitem.add (showItem);
}

// SimpleAdapter 생성
SimpleAdapter = New SimpleAdapter (getApplicationContext () , listite.m, r.layout.list_item, new string [] {" touxiang", "name", "says"}, new int[]{R.id.imgtou, R.id.name, R.id. 이라고 합니다});
ListView listView = (ListView) findViewById(R.id.list_test);
listView.setAdapter(myAdapter);
}
}

좋아요, 위의 SimpleAdapter의 간단한 사용법이 좀 흥미롭네요~10.jpg


3) SimpleCursorAdapter 사용 예:

이건 오래되었지만 아직 잘 모르는 초보자가 사용하기에는 꽤 편리합니다. SQLite에서! 이전에 ContentProivder가 작성한 연락처를 읽는 예를 기억하십니까? 이전에는 Log를 출력하는 방식으로 이루어졌습니다. 이제 이 SimpleCursorAdapter를 통해 ListView에 표시합니다!

구현 렌더링:

11.png

코드 구현:

먼저 listView에 각 항목의 레이아웃을 적어둡니다:

list_item.xml:

<?xml version="1.0" 인코딩="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent "
android:orientation="horizontal">


<TextView
android:id="@+id/list_name"
android:layout_width="0dp"
android:layout_height="64dp "
         android:layout_weight= “1” ​​​android:id= "@+id/list_phone"
                                                                           android:layout_width="0dp" ="13798989898"
android: textColor="#EA5C4D"
   android:textSize="18sp" />


</LinearLayout>

그런 다음 Activity_main 레이아웃은 이전과 동일하며 단순한 ListView이고

MainActivity.java:

Instance

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView list_test = (ListView) findViewById(R.id.list_test);
        //读取联系人
        Cursor cursor = getContentResolver()
                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        SimpleCursorAdapter spcAdapter = new SimpleCursorAdapter(this,R.layout.list_item,cursor,
                new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER},
                new int[]{R.id.list_name,R.id.list_phone});
        list_test.setAdapter(spcAdapter);
    }
}

인스턴스 실행»

"인스턴스 실행" 버튼을 클릭하여 온라인 인스턴스 보기

마지막으로 AndroidManifest.xml에 연락처 읽기 권한을 추가하면 됩니다!

<uses-permission android:name="android.permission.READ_CONTACTS"/>

Q&A:

Q: 그렇게 간단합니까?
——답변: 예, 커서를 직접 가져온 다음 SQL 문을 직접 작성할 필요가 없습니다.
질문: 이거 오래됐다고 했는데 뭘로 교체해야 하나요?
——답변: 일반적인 접근 방식은 BaseAdapter를 직접 다시 작성하고 데이터 컬렉션을 얻은 다음 이를 해당 컨트롤에 바인딩하는 것입니다!
Ask: 이 SimpleCursorAdapter와 관련해 주의해야 할 다른 사항이 있나요?
——답: 예, SimpleCursorAdapter를 사용하는 경우 바인딩된 데이터베이스 테이블에 id 필드가 있어야 합니다. 또는 id; 및 바인딩 중에 검색된 데이터에 이 id 항목이 포함되어야 합니다. 그렇지 않으면 다음 오류가 보고됩니다. java.lang.IllegalArgumentException: 열 'id'가 존재하지 않습니다**


요약:

그렇습니다. Adapter에 대한 기본 설명은 여기까지입니다. 물론 여기서 설명하는 세 가지 Adapter는 실제로 개발 중입니다. 기본적으로 사용되지 않습니다. 하하, 가끔 SimpleAdapter를 사용하는 경우를 제외하면 일반적으로 BaseAdapter를 다시 작성합니다!
이 외에도 BaseAdapter에 대해 설명할 내용이 많으니 ListView에 던져서 결국 Adapter에 대해 이야기해 보도록 하겠습니다. 항상 View와 연관되어 있는데, ListView가 우리가 가장 많이 사용하는 공간이에요~ 그럼 여기까지입니다. 감사합니다~