-
使用ViewHolder優化BaseAdapter的思路(如圖) 需要注意幾點: 1. Bean對象中封裝ListView的每一行數據 2. MainActivity中創建并填充List<ItemBean> itemList; for (int i=0; i<20; i++) { itemList.add(new ItemBean(R.drawable.ic_launcher, "Title"+i, "I am an Android app debugger"+i)); } 3. 自定義適配器的構造方法中傳入List<ItemBean> itemList數據 public MyAdapter(Context context, List<ItemBean> itemList) { super(); this.itemList = itemList; mInflater = LayoutInflater.from(context); } 4. getView()方法中將當前的ItemBean數據對象填充到當前convertView中 ItemBean itemBean = itemList.get(position); //得到當前行的ItemBean對象,里面包含了數據 viewHolder.imageView.setImageResource(itemBean.imageResId); viewHolder.title.setText(itemBean.title); viewHolder.content.setText(itemBean.content); return convertView;查看全部
-
ListView的適配器 首先這個適配器是繼承自BaseAdapter(接上一筆記) 1. 逗比式適配器 在逗比式getView()方法中,每次都會重新創建一個新的View。然后從這個View實例中找到對應的組件進行填充數據。 2. 普通式適配器 在普通式getView()方法中,先去判斷當前的View是否已經緩存過,沒有緩存過才去創建。 if(convertView == null) { convertView = mInflater.inflate(R.layout.item, null); } 普通式和逗比式的區別在于判斷當前View實例是否被緩存過,這樣就利用了ListView的緩存機制,避免了重新創建了當前View對象。因為通過inflate()轉換xml到一個view的過程需要一定的時間。 3. 文藝式適配器 文藝式getView()方法是利用了ViewHolder類,優化了inflate()和findViewById()的耗時操作。 (1)創建一個ViewHolder對象,通過ViewHolder對象,就將這些通過findViewById()找到的組件對象保存到了ViewHolder對應的組件對象中 (2)通過setTag()方法將這個viewHolder和當前的view建立聯系 //這樣就可以將沒有緩存過的View對象創建出來,并將其每個組件保存在ViewHolder對象中。 (3)當View不為空的時候就可以通過convertView.getTag()將它所關聯的viewHoloder對象取出。 (4)最后通過viewHolder中保存的組件對象設置當前的view對象 //通過ViewHolder類其實是優化了findViewById()的耗時操作查看全部
-
使用ViewHolder優化BaseAdapter思路查看全部
-
BaseAdapter (接上一筆記) 4. 創建一個自己的Adapter適配器,這一點和ViewPager以及ViewPagerFragment重寫自己的Adapter適配器是相似的。 參考:Android中常用高級控件詳解匯總 10-1(http://www.xianlaiwan.cn/video/2574) public View getView(int position, View convertView, ViewGroup parent) { View view = mInflater.inflate(R.layout.item, null); ImageView imageView = (ImageView) view.findViewById(R.id.imageView); TextView title = (TextView) view.findViewById(R.id.tv_title); TextView content = (TextView) view.findViewById(R.id.tv_content); ItemBean itemBean = itemList.get(position); //得到當前的這個ItemBean對象 //然后用這個itemBean填充item轉化過來的view imageView.setImageResource(itemBean.imageResId); title.setText(itemBean.title); content.setText(itemBean.content); return view; } 5. 最后要給ListView設置自己的適配器 MyAdapter myAdapter = new MyAdapter(MainActivity.this, itemList);//注意傳遞的參數,itemList就是前面已經填充好數據的itemList listView.setAdapter(myAdapter); 6. 以上做法可以否定了,faint!查看全部
-
BaseAdapter 1. 這個抽象類的一些方法(如圖),其中getView()是比較重要的方法,可以獲取指定位置item的顯示內容。 2. 通常創建一個Bean類來填充ListView中的一行數據。在它的構造函數中初始化ListView一行的所有數據。 public ItemBean(int imageResId, String title, String content) { super(); this.imageResId = imageResId; this.title = title; this.content = content; } 3. 在MainActivity中,創建ListView的每行的數據,封裝在一個List<ItemBean>中。 填充好數據的List<ItemBean>對象就是一個ItemBean的一個集合 itemList = new ArrayList<ItemBean>(); for (int i=0; i<20; i++) { itemList.add(new ItemBean(R.drawable.ic_launcher, "Title"+i, "I am an Android app debugger"+i)); }查看全部
-
ListView的顯示和緩存機制 總結來講: 需要才顯示,顯示完就被回收到緩沖池中。 1. 屏幕上滑時,先將item1回收到View緩沖池中 2. 新要顯示的item8從View緩沖池中取出,并重新設置好item8所要顯示的數據 3. item8顯示出來查看全部
-
BaseAdapter 數據適配器adapter的作用就是建立了數據源和ListView之間的適配關系,將數據源的數據轉換成了ListView能夠顯示的數據格式查看全部
-
LayoutInflater方法將xml文件轉化為View布局。 LayoutInflater通過from()方法可以將XML布局文件轉換成View對象。查看全部
-
BaseAdapter文藝式3查看全部
-
BaseAdapter文藝式2查看全部
-
BaseAdapter文藝式1查看全部
-
BaseAdapter文藝式2查看全部
-
BaseAdapter文藝式1查看全部
-
BaseAdapter普通式查看全部
-
listview適配器逗比式查看全部
舉報
0/150
提交
取消