Android ListView 데이터 채 우 는 방법
여러 사람 이 개발 하기 때문에 자신 이 개발 한 모듈 이 메 인 프레임 에 쉽게 융합 되 는 동시에 apk 의 크기 를 줄 이기 위해 가능 한 한 xml 의 레이아웃 파일 을 적 게 사용 해 야 합 니 다.개발 과정 에서 ListView 에 데 이 터 를 표시 해 야 합 니 다.인터넷 에서 찾 아 낸 거의 모든 예 는 xml 파일 을 통 해 ListView 의 Item 에 레이아웃 스타일 을 제공 하 는 것 이 매우 불편 합 니 다.
코드 를 통 해 만 든 레이아웃(예 를 들 어 View,LinearLayout)등 동적 레이아웃 을 ListView 에 배치 할 수 있 습 니까?그럼요.
ListView 에 데 이 터 를 제공 하기 위해 서 는 적절 한 설정 이 필요 합 니 다.BaseAdapter 에서 계승 한 다음 getView 방법 을 다시 쓸 수 있 습 니 다.이 방법 에는 convertView 라 는 인자 가 있 습 니 다.사용자 정의 보기 로 설정 하고 되 돌아 와 코드 로 정 의 된 레이아웃 을 불 러 올 수 있 습 니 다.
LinearLayout 레이아웃 을 정의 합 니 다.이것 은 View 에서 계승 한 것 이기 때문에 getView 를 통 해 되 돌아 갈 수 있 습 니 다.(주의:이 레이아웃 에 LinearLayout.LayoutParams 인 자 를 사용 하지 마 십시오.ListView 가 인식 되 지 않 기 때문에 AbsListView LayoutParams 를 식별 합 니 다)
코드 는 다음 과 같 습 니 다:
public class PriceBoard extends LinearLayout {
private ListView listView;
private List items;
private LinearLayout.LayoutParams params;
public PriceBoard(Context context, AttributeSet attrs) {
super(context, attrs);
items = new ArrayList();
this.setOrientation(HORIZONTAL);
params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
listView = new ListView(context);
listView.setLayoutParams(params);
PriceBoardAdapter priceBoardAdapter = new PriceBoardAdapter(context);
listView.setAdapter(priceBoardAdapter);
addView(listView, params);
}
public void add(PriceData data){
PriceBoardItem item = new PriceBoardItem(this.getContext(),null);
item.setItem(data);
items.add(item);
params.setMargins(10,0,0,2);
// item.setLayoutParams(params);
}
public PriceBoardItem getItemView(int index){
return (PriceBoardItem)items.get(index);
}
private class PriceBoardItem extends LinearLayout{
private TextView nameView;
private TextView enCodeView;
private TextView priceView;
private PriceData priceData;
public PriceBoardItem(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOrientation(HORIZONTAL);
nameView = new TextView(context);
nameView.setTextSize(TypedValue.COMPLEX_UNIT_PX,38);
enCodeView = new TextView(context);
enCodeView.setTextSize(TypedValue.COMPLEX_UNIT_PX,28);
priceView = new TextView(context);
priceView.setTextSize(TypedValue.COMPLEX_UNIT_PX,48);
priceView.setGravity(Gravity.CENTER);
setLayout();
}
public TextView getNameView(){
return nameView;
}
public TextView getEnCodeView(){
return enCodeView;
}
public TextView getPriceView(){
return priceView;
}
public PriceData getPriceData(){
return priceData;
}
private void setLayout(){
LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT,1);
LinearLayout linearLayout = new LinearLayout(getContext());
linearLayout.setOrientation(VERTICAL);
linearLayout.addView(nameView,p);
linearLayout.addView(enCodeView,p);
addView(linearLayout, p);
p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,1);
linearLayout = new LinearLayout(getContext());
linearLayout.setOrientation(VERTICAL);
linearLayout.addView(priceView,p);
addView(linearLayout, p);
}
public void setItem(PriceData data){
priceData = data;
}
}
private class PriceBoardAdapter extends BaseAdapter{
private Context _context;
public PriceBoardAdapter(Context context){
_context = context;
}
public int getCount(){
return items.size();
}
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
PriceBoardItem view = getItemView(position);
PriceData data = ((PriceBoardItem) items.get(position)).getPriceData();
view.getNameView().setText(data.getName());
view.getEnCodeView().setText(data.getEnCode());
view.getPriceView().setText(String.valueOf(data.getPrice()));
convertView = view;
return convertView;
}
}
호출:
PriceBoard priceBoard = new PriceBoard(context,null);
priceData = new PriceData();
priceData.setName(" ");
priceData.setEnCode("Ag");
priceData.setPrice(4006);
priceBoard.add(priceData);
priceData = new PriceData();
priceData.setName(" ");
priceData.setEnCode("Cu");
priceData.setPrice(43895);
priceBoard.add(priceData);
priceData = new PriceData();
priceData.setName(" ");
priceData.setEnCode("Ni");
priceData.setPrice(43895);
priceBoard.add(priceData);
addView(priceBoard);
효과:궁금 한 점 이 있 으 시 면 메 시 지 를 남기 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 을 교류 하 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.