ListView는 간단하고 실용적입니다.


이 섹션 소개:

이 섹션에서는 UI 컨트롤의 미완성 부분을 계속해서 연구합니다. 이전 섹션을 되돌아 보면 어댑터 어댑터의 개념을 소개한 다음 가장 간단한 세 가지 어댑터인
ArrayAdapter, SimpleAdapter 및 SimpleCursorAdapter의 사용법을 배웠습니다. 이 섹션에서는 첫 번째 어댑터에 대해 설명합니다. Adapter: ListView와 함께 사용해야 하는 UI 컨트롤이지만 버전에서는 새로운 컨트롤 RecyclerView로 대체되었습니다!
가장 일반적으로 사용되는 컨트롤 중 하나로 목록을 주의 깊게 학습해야 합니다. 이 섹션은 초보자의 관점에서 학습됩니다. ListView, ListView의 속성 및 BaseAdapter는 간단히 정의됩니다. ListView의 최적화는 다음과 같습니다. 차근차근 따라해 보세요~ 서두르지 마세요!


1 BaseAdapter를 사용자 정의한 다음 ListView를 바인딩하는 가장 간단한 예

먼저 달성하려는 렌더링을 살펴보겠습니다.

1.png

매우 간단한 ListView, 항목을 직접 작성한 다음 다음과 같은 일부 데이터를 로드합니다. 이거~ 아래에 키 코드를 붙여넣으세요:

Animal.java:

/**
 * 2015년 9월 18일 Jay가 0018년에 작성함.
 */
public class Animal {
    private String aName;
    private String aSpeak;
    private int aIcon;

    public Animal() {
    }

    public 동물(문자열 a이름, 문자열 a말, int aIcon) {
        this.aName = aName;
        this.aSpeak = aSpeak;
        this.aIcon = aIcon;
    }

    public String getaName() {
        return aName;
    }

    공개 문자열 getaSpeak() {
return aSpeak;
    }

    public int getaIcon() {
        return aIcon;
    }

    public void setaName(String aName) {
        this.aName = aName;
    }

    public void setaSpeak(String aSpeak) {
        이것 .aSpeak = aSpeak;
    }

    public void setaIcon(int aIcon) {
        this.aIcon = aIcon;
    }
}

AnimalAdapter.java:맞춤형 BaseAdapter:

/**
 * 2015년 9월 18일 Jay가 0018년에 작성함.
 */
public class AnimalAdapter 확장 BaseAdapter {

    private LinkedList<Animal> mData;
    private Context mContext;

    public AnimalAdapter(LinkedList<Animal> mData, Context mContext) {
       this.mData = mData;
       this.mContext = mContext;
    }

    @Override
    public int getCount() {
return mData.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    공개 보기 getView(int 위치, 보기 변환 보기, ViewGroup 상위 ) {
        convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);
        ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
        TextView txt_a 이름 = (TextView) ConvertView.findViewById(R.id.txt_aName);
        TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak);
       img_icon.setBackgroundResource(mData.get(position).getaIcon());
        txt_aName.setText (mData.get(position).getaName());
        txt_aSpeak.setText(mData.get(position).getaSpeak());
        return ConvertView;
    }
}

마지막으로 MainActivity.java:

public 클래스 MainActivity는 AppCompatActivity를 확장합니다. 타고
      protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
       mContext = MainActivity.this;
   list_animal = (ListView) findViewById(R.id.list_animal);
mData = new LinkedList<Animal>();
mData.add(new Animal("狗说", "당신은 개입니까?", R.mipmap.ic_icon_dog));
mData.add(new Animal("牛说" ", "당신은 소입니까?", R.mipmap.ic_icon_cow));
mData.add(new Animal("Duck Said", "당신은 오리입니까?", R.mipmap.ic_icon_duck));
mData . add(new Animal("鱼说", "당신은 물고기입니까?", R.mipmap.ic_icon_fish));
   mData.add(new Animal("马说", "당신은 말입니까?", R. mipmap .ic_icon_horse));
            mAdapter = new AnimalAdapter((LinkedList<Animal>) mData, mContext);
                                                       |

알겠습니다. BaseAdapter를 사용자 정의하고 데이터 바인딩을 완료하는 것은 간단합니다~
예제 코드를 묻지 마세요. 처음 학습을 시작할 때 이 코드를 작성하면 모두가 익숙해질 수 있습니다. 그냥 익숙하네요~ 추가적으로 다음 속성 검증도 준비 중입니다~


2. 헤더와 테일 구분선 설정:

listview는 일반 목록과 동일합니다. 헤더와 꼬리를 직접 설정하세요. 테이블 끝: 구분선 외에도 설정할 수 있는 속성은 다음과 같습니다.

  • footerDividersEnabled: footerView(테이블 꼬리) 앞에 구분선을 그릴지 여부, 기본값은 true
  • headerDividersEnabled: headerView 앞에 그릴지 여부(테이블 tail) 구분선, 기본값은 true
  • divider: 색상 또는 그리기 가능한 리소스별로 구분할 수 있는 구분선을 설정합니다.
  • dividerHeight: 높이를 설정합니다. Divider

API를 통해 검색해보니 ListView 헤더나 바닥글의 속성을 직접 설정할 수 있고, 코드는 Java로만 작성할 수 있습니다. 설정 후 호출할 수 있는 메소드는 다음과 같습니다.

  • addHeaderView(View v): headView(헤더)를 추가합니다. 괄호 안의 매개변수는 View 객체입니다.
  • addFooterView(View v): Add footerView (End of table), 괄호 안의 매개변수는 View 객체
  • addHeaderView(headView, null, false): 이전과의 차이점: Header 선택 가능 여부 설정
  • addFooterView(View, view , false): 위와 동일

그런데 이 addHeaderView 메소드를 사용할 때 listview.setAdapter 앞에 배치해야 하며, 그렇지 않으면 오류가 보고됩니다.

사용 예:

렌더링 실행:

2.gif

코드 구현:

먼저 테이블 머리글과 바닥글의 레이아웃을 작성합니다.

view_header.xml (헤더) , 테이블의 끝은 동일하므로 게시하지 않겠습니다:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width ="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">
    <TextView
        android:layout_width="match_parent"
        android:layout_height ="48dp" ㅋㅋㅋ ="#FFFFFF"/>
</LinearLayout>

MainActivty.java:

public 클래스 MainActivity는 AppCompatActivity를 확장하여 AdapterView.OnItemClickListener를 구현합니다.{

    private List<Animal> mData = null;
    private Context mContext;
    private AnimalAdapter mAdapter = null;
    private ListView list_animal;
    private LinearLayout ly_content;

    @Override
    protected void onCreate(Bund le savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView( R.layout.activity_main);
        mContext = MainActivity.this;
       list_animal = (ListView) findViewById(R.id.list_animal);
        //动态加载顶PartView와底부View
        최종 LayoutInflater 팽창기 = LayoutInflater.from(this) ;
        보기 headView = inflater.inflate(R.layout.view_header, null, false);
        보기 footView = inflater.inflate(R.layout.view_footer, null, false);

        mData = new LinkedList< 동물>() ;
        mData.add(new Animal("狗说", "你是狗么?", R.mipmap.ic_icon_dog));
       mData.add(new Animal("牛说", "你是牛么?" , R.mipmap.ic_icon_cow));
        mData.add(new Animal("鸭说", "你是鸭么?", R.mipmap.ic_icon_duck));
        mData.add(new Animal("鱼说" , "你是鱼么?", R.mipmap.ic_icon_fish));
        mData.add(new Animal("马说", "你是马么?", R.mipmap.ic_icon_horse));
        mAdapter = new AnimalAdapter((LinkedList<Animal>) mData, mContext);
        //添加表头와 表尾需要写재setAdapter방법을 사용하기 전에!!!
        list_animal.addHeaderView(headView);
        list_animal.addFooterView(footView);

list_animal.setAdapter(mAdapter);
list_animal.setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(mContext, "" + 위치 + "항목", Toast.LENGTH_SHORT).show();
}
}

좋아, 코드는 비교적 간단합니다. 위에서 결제해야 할 문제를 볼 수 있습니다. 즉,

테이블 머리글과 바닥글을 추가한 후 테이블 머리글에서 위치가 계산되는 것을 발견했습니다. 즉, 추가한 첫 번째 데이터의 원래 위치는 다음과 같습니다. 0이었는데 이때는 헤더도 카운트되기 때문에 0이 되었습니다! !


3 목록은 맨 아래부터 표시됩니다. stackFromBottom

목록이 목록 맨 아래부터 표시되도록 하려면 이 속성을 stackFromBottom에 사용할 수 있습니다. 속성을 true로 설정하면 다음과 같습니다.

3.png


4. 클릭 색상을 설정합니다. listView가 비어 있습니다. 위치를 찾을 수 있습니다. 이제 항목이 모두 검은색으로 변했습니다.

cacheColorHint
: #00000000

5. 슬라이더 숨기기

를 통해 색상을 투명하게 설정할 수 있습니다. android:scrollbars="none " 또는 setVerticalScrollBarEnabled(true); 이 문제를 해결해보세요!

이 섹션 요약:

좋아요, 이는 ListView의 기본 사용법에 관한 것입니다. 물론 위 속성 외에도 다른 속성이 있습니다. 실제로 만나면 확인해 보세요~ BaseAdapter를 다시 작성하고 데이터 바인딩을 완료하는 방법만 알아두세요. 이 BaseAdapter의 작성을 최적화하는 방법을 가르쳐주세요~