Android ListView填充數(shù)據(jù)的方法
Android ListView填充數(shù)據(jù)的方法
因?yàn)槎嗳碎_發(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è)置為我們自定義的視圖并返回,來實(shí)現(xiàn)加載用代碼定義好的布局。
定義一個LinearLayout布局,它是繼承自View的,所以可以通過getView返回(注意:不要為這個布局使用 LinearLayout.LayoutParams 參數(shù),因?yàn)長istView不識別,他識別的是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實(shí)現(xiàn)自動填充
- Android矢量圖之VectorDrawable類自由填充色彩
- Android ScrollView無法填充滿屏幕的解決辦法
- Android圖片等比例縮放和填充屏幕效果
- Android不規(guī)則圖像填充顏色小游戲
- Android圖像處理之泛洪填充算法
- Android多邊形區(qū)域遞歸種子填充算法的示例代碼
- Android不規(guī)則封閉區(qū)域填充色彩的實(shí)例代碼
- Android多邊形區(qū)域掃描線種子填充算法的示例
相關(guān)文章
Flutter懸浮按鈕FloatingActionButton使用詳解
本文主要介紹了Flutter懸浮按鈕FloatingActionButton使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07Android基礎(chǔ)之隱藏標(biāo)題欄/設(shè)置為全屏/橫豎屏切換
大家好,本篇文章主要講的是Android基礎(chǔ)之隱藏標(biāo)題欄/設(shè)置為全屏/橫豎屏切換,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12android RecycleView實(shí)現(xiàn)多級樹形列表
這篇文章主要為大家詳細(xì)介紹了android RecycleView實(shí)現(xiàn)多級樹形列表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-05-05android全屏去掉title欄的多種實(shí)現(xiàn)方法
android全屏去掉title欄包括以下幾個部分:實(shí)現(xiàn)應(yīng)用中的所有activity都全屏/實(shí)現(xiàn)單個activity全屏/實(shí)現(xiàn)單個activity去掉title欄/自定義標(biāo)題內(nèi)容/自定義標(biāo)題布局等等感興趣的可參考下啊2013-02-02Android ListView在Fragment中的使用示例詳解
這篇文章主要介紹了Android ListView在Fragment中的使用,因?yàn)楣ぷ饕恢痹谟胢vvm框架,因此這篇文章是基于mvvm框架寫的,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09Activity isFinishing()判斷Activity的狀態(tài)實(shí)例
下面小編就為大家分享一篇Activity isFinishing()判斷Activity的狀態(tài)實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03