Android ListView 데이터 채 우 는 방법

5839 단어 AndroidListView
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); 
효과:

궁금 한 점 이 있 으 시 면 메 시 지 를 남기 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 을 교류 하 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기