Android ListView 와 Adapter 데이터 어댑터 에 대한 간단 한 소개

ListView
같은 형식의 데 이 터 를 대량으로 표시 합 니 다.
상용 속성:
  • listSelector listView 각 항목 이 선택,아래 의 상태 에 따라 Drawable
  • divider ListView 각 항목 간 의 간격 Drawable
  • divider Height ListView 각 항목 간 간격 높이

  • 상용 방법:
    setAdapter()설정 데이터 어댑터
  • setOnItemClickListener()는 각 클릭 이벤트 감청 을 설정 합 니 다
  • addHeaderView()헤더 보기 추가
  • addFooterView()발 보기 추가
  • setEmpty View()는 데이터 항목 이 0 일 때의 빈 데이터 보 기 를 설정 합 니 다
  • 감청 사건
    이 감청 의 예 는 머리 보기 항목 의 아래 표 시 를 설정 하여 position-list view.getHeaderViewsCount()로 항목 의 아래 표 시 된 위 치 를 계산 하여 정확 한 대상 을 가 져 오 는 것 입 니 다.

    Adapter 데이터 어댑터 는 각종 데 이 터 를 적당 한 형식 으로 컨트롤 에 연결 합 니 다.예 를 들 어 listview,gridview,spinner 등 컨트롤 은 Adapter 바 인 딩 데 이 터 를 사용 합 니 다.
    어댑터 3 종 소개
  • Array Adapter:일반적인 조작 을 지원 합 니 다.가장 간단 한 Adapter 는 한 줄 의 문자 만 보 여 줍 니 다
  • Simple Adapter:똑 같이 좋 은 확장 성 을 가 진 Adapter 는 여러 가지 효 과 를 사용자 정의 할 수 있 습 니 다
  • BaseAdapter:추상 류,실제 개발 에서 우 리 는 이런 종 류 를 계승 하고 관련 방법 을 다시 쓸 것 이다.가장 많이 사용 하 는 Adapter간단하게 소개 해 드릴 게 요.
    1.ArrayAdapter

    매개 변수 1:현재 상하 문 환경
    인자 2:android.R.layout.simplelist_item_1
    안 드 로 이 드 자체 가 가지 고 있 는 간단 한 레이아웃 입 니 다.id 가 text 1 인 TextView 만 포함 되 어 있 습 니 다.즉,매개 변수 3 Array Adapter 는 한 줄 의 데이터 만 표시 하고 텍스트 정 보 를 표시 합 니 다.이 시스템 에서 제공 하 는 레이아웃 을 사용 하면 됩 니 다.
    안 드 로 이 드 시스템 은 우리 에 게 다른 좋 은 템 플 릿 도 제공 했다.
  • simple_list_item_1:한 줄 의 텍스트 상자
  • simple_list_item_2:두 텍스트 상자 구성
  • simple_list_item_checked:모든 항목 은 선택 한 목록 항목 입 니 다
  • imple_list_item_multiple_choice:모두 체크 상자 가 있 습 니 다
  • simple_list_item_single_choice:모두 체크 버튼 이 있 습 니 다
  • 인자 4:바 인 딩 된 데 이 터 는 string 배열 에서 언급 한 Array Adapter 지원 범 형 으로 list 를 연결 할 수 있 습 니 다.
    표시 효과 가 listview 에 귀속 되 었 습 니 다

    2.SimpleAdapter
    simpleAdapter 의 확장 성 이 가장 좋 습 니 다.다양한 레이아웃 을 정의 할 수 있 습 니 다.ImageView(그림)를 올 릴 수도 있 고 Button(단추),CheckBox(체크 상자)등 을 올 릴 수도 있 습 니 다.

    결과 보이 기

    여기 서 인용 한 레이아웃 은 시스템 기본 simple 입 니 다.list_item_2
    listView 항목 의 효 과 는 레이아웃 에 따라 표 시 됩 니 다.아무리 멋 있 게 써 도 됩 니 다.
    3.BaseAdapter
    BaseAdapter 는 개발 에 가장 많이 사용 되 는 어댑터 Array Adapter 로 Simple Adapter 는 모두 BaseAdapter 에 계승 되 어 있 습 니 다.BaseAdapter 는 자신 이 정의 한 Adapter 를 완성 할 수 있 습 니 다.복잡 한 조합의 데이터 와 자원 을 원 하 는 디 스 플레이 효과 로 보 여 드릴 수 있 습 니 다.
    BaseAdapter 를 계승 한 후 다음 과 같은 네 가지 방법 을 다시 써 야 합 니 다:getCount,getItem,getItemId,getView.
    시스템 은 ListView 를 그리 기 전에 getCount 방법 을 사용 하여 Item 의 개 수 를 가 져 옵 니 다.아 이 템 을 그 릴 때마다 getView 방법 을 호출 합 니 다.getView 에서 미리 정 의 된 layot 레이아웃 을 참조 하여 표시 효 과 를 확인 하고 View 대상 을 하나의 아 이 템 으로 되 돌려 줍 니 다.
    이 두 가지 방법 은 자체 적 으로 ListView 디 스 플레이 효과 에서 가장 중요 한 것 입 니 다.또한 이 두 가지 방법 을 다시 쓰 면 ListView 는 개발 자의 요구 에 따라 완전히 표시 할 수 있 습 니 다.getItem 과 getItemId 방법 은 ListView 의 응답 방법 을 호출 할 때 호출 됩 니 다.
    레이아웃 파일 사용자 정의(listview 항목 표시 효과)
    
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
    
      <ImageView
        android:id="@+id/image_photo"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:padding="10dp"/>
      <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:layout_toRightOf="@id/image_photo"/>
      <TextView
        android:id="@+id/age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:layout_toRightOf="@id/image_photo"
        android:layout_below="@id/name"
        android:layout_marginTop="10dp"/>
    </RelativeLayout>
    학생
    
    public class Student {
      private String name;
      private int age;
      private int photo;
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public int getAge() {
        return age;
      }
    
      public void setAge(int age) {
        this.age = age;
      }
    
      public int getPhoto() {
        return photo;
      }
    
      public void setPhoto(int photo) {
        this.photo = photo;
      }
    }
    MainActivity
    
    public class MainActivity extends AppCompatActivity {
    
      private ListView listView;
      //   BaseAdapter
      private MyAdapter adapter;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView= (ListView) findViewById(R.id.listview);
        List<Student> stuList=new ArrayList<>();
        for(int i=0;i<10;i++){
          Student stu=new Student();
          stu.setAge(10+i);
          stu.setName("name"+i);
          stu.setPhoto(R.mipmap.ic_launcher);
          stuList.add(stu);
        }
          
        adapter=new MyAdapter(stuList,MainActivity.this);
        listView.setAdapter(adapter);
      }
    MyAdapter
    
    public class MyAdapter extends BaseAdapter {
    
      private List<Student> stuList;
      private LayoutInflater inflater;
      public MyAdapter() {}
    
      public MyAdapter(List<Student> stuList,Context context) {
        this.stuList = stuList;
        this.inflater=LayoutInflater.from(context);
      }
    
      @Override
      public int getCount() {
        return stuList==null?0:stuList.size();
      }
    
      @Override
      public Student getItem(int position) {
        return stuList.get(position);
      }
    
      @Override
      public long getItemId(int position) {
        return position;
      }
    
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        //         
        View view=inflater.inflate(R.layout.layout_student_item,null);
        Student student=getItem(position);
        // view     id image_photo   
        ImageView image_photo= (ImageView) view.findViewById(R.id.image_photo);
        TextView tv_name= (TextView) view.findViewById(R.id.name);
        TextView tv_age= (TextView) view.findViewById(R.id.age);
        image_photo.setImageResource(student.getPhoto());
        tv_name.setText(student.getName());
        tv_age.setText(String.valueOf(student.getAge()));
        return view;
      }
    결과 보이 기

    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기