어댑터 간결한 쓰기
EasyListView
ListView를 사용할 때마다 어댑터를 써야 합니다.징그러운 것은 getView () 방법에 코드를 한 무더기 추가해야 하기 때문에 유지보수든 처음부터 쓰기든 매우 불편하다.이 프로젝트는 코드를 매우 간소화하고 코드를 더욱 모듈화할 수 있으며, 3단계만 있으면 하나의 어댑터를 실현할 수 있다.GitHub : https://github.com/jqzhang/EasyListView
아이디어 실현:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
// view null
if (null == convertView || ((convertView.getTag() != null) && (((ViewHolder) convertView.getTag()).getType() != getItemViewType(position)))) {
vh = onCreateViewHolder(parent, position);
vh.setType(getItemViewType(position));
} else {
vh = (ViewHolder) convertView.getTag();
}
if (null == vh) {
return null;
}
vh.updateView(vh.getConvertView(), getItem(position), position);
return vh.getConvertView();
}
프로젝트 주소
참고: 프로젝트에서 butterknife 사용
단일 양식
class SingleTypeAdapter extends EasyBaseAdapter {
List list = new ArrayList<>();
@Override
protected List getList() {
if (list.size() > 0) {
return list;
}
//
for (int i = 0; i < 60; i++) {
SingleTypeActivity.Result result = new SingleTypeActivity.Result();
list.add(result);
}
return list;
}
// Item ViewHolder
@Override
protected EasyBaseAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int position) {
// ItemView
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_1, null);
return new SingleTypeViewHolder(view);
}
}
@Bind(R.id.textView)
TextView textView;
public SingleTypeViewHolder(View view) {
super(view);
}
@Override
protected void updateView(View convertView, Result data, int position) {
// View
textView.setText(data.txt + position + " " + (null == convertView));
}
}
여러 가지 스타일
//
@Override
public int getViewTypeCount() {
return 2;
}
//
@Override
public int getItemViewType(int position) {
if (0 == position % 2) {
return 0;
} else {
return 1;
}
}
List list = new ArrayList<>();
@Override
protected List getList() {
if (list.size() > 0) {
return list;
}
//
for (int i = 0; i < 60; i++) {
MutiTypeActivity.Result result = new MutiTypeActivity.Result();
list.add(result);
}
return list;
}
// Item ViewHolder
@Override
protected EasyBaseAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int position) {
// ViewType ItemView
if (0 == getItemViewType(position)) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_1, null);
return new MutiTypeViewHolder1(view);
} else {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_2, null);
return new MutiTypeViewHolder2(view);
}
}
}
@Bind(R.id.textView)
TextView textView;
public MutiTypeViewHolder1(View view) {
super(view);
}
@Override
protected void updateView(View convertView, Result data, int position) {
// View
textView.setText(" + " + position + " " + (null == convertView));
}
}
class MutiTypeViewHolder2 extends EasyBaseAdapter.ViewHolder {
@Bind(R.id.imageView)
ImageView imageView;
public MutiTypeViewHolder2(View view) {
super(view);
}
@Override
protected void updateView(View convertView, Result data, int position) {
// View
imageView.setImageResource(R.mipmap.rr);
}
}
주의: 여러 스타일의ListView 어댑터에서 getViewTypeCount () 와 getItemViewType () 두 가지 방법을 반드시 실현해야 합니다.나머지는 그대로 옮기면 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.