Android ListView填充數(shù)據(jù)的方法
Android ListView填充數(shù)據(jù)的方法
因為多人開發(fā),為了是自己開發(fā)的模塊方便融合到主框架中,同時也為了減小apk的大小,要求盡可能少的使用xml的布局文件,開發(fā)中需要在ListView中顯示數(shù)據(jù),網(wǎng)上查到的幾乎所有的示例,都是通過xml文件來為ListView的Item提供布局樣式,甚是不方便。
能不能將自己通過代碼創(chuàng)建的布局(如View,LinearLayout)等動態(tài)的布局到ListView呢?當(dāng)然可以。
為了給ListView提供數(shù)據(jù),我們需要為其設(shè)置一個適配,我們可以從BaseAdapter繼承,然后重寫它的getView方法,這個方法中有一個參數(shù)convertView,我們可以將它設(shè)置為我們自定義的視圖并返回,來實現(xiàn)加載用代碼定義好的布局。
定義一個LinearLayout布局,它是繼承自View的,所以可以通過getView返回(注意:不要為這個布局使用 LinearLayout.LayoutParams 參數(shù),因為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;
}
}
調(diào)用:
PriceBoard priceBoard = new PriceBoard(context,null);
priceData = new PriceData();
priceData.setName("現(xiàn)貨白銀");
priceData.setEnCode("Ag");
priceData.setPrice(4006);
priceBoard.add(priceData);
priceData = new PriceData();
priceData.setName("現(xiàn)貨銅");
priceData.setEnCode("Cu");
priceData.setPrice(43895);
priceBoard.add(priceData);
priceData = new PriceData();
priceData.setName("現(xiàn)貨鎳");
priceData.setEnCode("Ni");
priceData.setPrice(43895);
priceBoard.add(priceData);
addView(priceBoard);
效果:

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- Android Studio使用小技巧:布局預(yù)覽時填充數(shù)據(jù)
- 基于Android中的 AutoCompleteTextView實現(xiàn)自動填充
- Android矢量圖之VectorDrawable類自由填充色彩
- Android ScrollView無法填充滿屏幕的解決辦法
- Android圖片等比例縮放和填充屏幕效果
- Android不規(guī)則圖像填充顏色小游戲
- Android圖像處理之泛洪填充算法
- Android多邊形區(qū)域遞歸種子填充算法的示例代碼
- Android不規(guī)則封閉區(qū)域填充色彩的實例代碼
- Android多邊形區(qū)域掃描線種子填充算法的示例
相關(guān)文章
Flutter 中的PageStorage小部件使用及最佳實踐
在Flutter中,PageStorage小部件提供了一種方法來保存和恢復(fù)頁面間的信息,這對于具有多個頁面且需要在這些頁面之間共享狀態(tài)的應(yīng)用程序非常有用,本文將詳細(xì)介紹PageStorage的用途、如何使用它以及一些最佳實踐,感興趣的朋友跟隨小編一起看看吧2024-05-05
Android組件創(chuàng)建DrawerLayout導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了Android組件創(chuàng)建DrawerLayout導(dǎo)航的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01
Android布局之GridLayout網(wǎng)格布局
網(wǎng)格布局標(biāo)簽是GridLayout。這個布局是android4.0新增的布局。這個布局只有4.0之后的版本才能使用。本文給大家介紹Android布局之GridLayout網(wǎng)格布局相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧2015-12-12
Android中Fragment的分屏顯示處理橫豎屏顯示的實現(xiàn)方法
今天小編就為大家分享一篇關(guān)于Android中Fragment的分屏顯示處理橫豎屏顯示的實現(xiàn)方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
利用Fiddler對手機(jī)進(jìn)行抓包的實現(xiàn)方法
下面小編就為大家?guī)硪黄肍iddler對手機(jī)進(jìn)行抓包的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05

