Android LayoutInflater深度解析 給你帶來全新的認識
本文出自:http://blog.csdn.net/lmj623565791/article/details/38171465
1、 題外話
相信大家對LayoutInflate都不陌生,特別在ListView的Adapter的getView方法中基本都會出現,使用inflate方法去載入一個佈局,用於ListView的每個Item的佈局。Inflate有三個引數,我在初學Android的時候這麼理解的:
對於Inflate的三個引數(int resource, ViewGroup root, boolean attachToRoot)
如果inflate(layoutId, null )則layoutId的最外層的控制元件的寬高是沒有效果的
如果inflate(layoutId, root, false ) 則認為和上面效果是一樣的
如果inflate(layoutId, root, true ) 則認為這樣的話layoutId的最外層控制元件的寬高才能正常顯示
如果你也這麼認為,那麼你有就必要好好閱讀這篇文章,因為這篇文章首先會驗證上面的理解是錯誤的,然後從原始碼角度去解釋,最後會從ViewGroup與View的角度去解釋。
2、 實踐是驗證真理的唯一標準
下面我寫一個特別常見的例子來驗證上面的理解是錯誤的,一個特別簡單的ListView,每個Item中放一個按鈕:
Activity的佈局檔案:
[html] view plain copy
- <ListView xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/id_listview"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- </ListView>
[html] view plain copy
- <Button xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/id_btn"
- android:layout_width="120dp"
- android:layout_height="120dp" >
- </Button>
ListView的介面卡:
[java] view plain copy
- package com.example.zhy_layoutinflater;
- import java.util.List;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- public class MyAdapter extends BaseAdapter
- {
- private LayoutInflater mInflater;
- private List<String> mDatas;
- public MyAdapter(Context context, List<String> datas)
- {
- mInflater = LayoutInflater.from(context);
- mDatas = datas;
- }
- @Override
- public int getCount()
- {
- return mDatas.size();
- }
- @Override
- public Object getItem(int position)
- {
- return mDatas.get(position);
- }
- @Override
- public long getItemId(int position)
- {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent)
- {
- ViewHolder holder = null;
- if (convertView == null)
- {
- holder = new ViewHolder();
- convertView = mInflater.inflate(R.layout.item, null);
- // convertView = mInflater.inflate(R.layout.item, parent ,false);
- // convertView = mInflater.inflate(R.layout.item, parent ,true);
- holder.mBtn = (Button) convertView.findViewById(R.id.id_btn);
- convertView.setTag(holder);
- } else
- {
- holder = (ViewHolder) convertView.getTag();
- }
- holder.mBtn.setText(mDatas.get(position));
- return convertView;
- }
- private final class ViewHolder
- {
- Button mBtn;
- }
- }
主Activity:
[java] view plain copy
- package com.example.zhy_layoutinflater;
- import java.util.Arrays;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.ListView;
- public class MainActivity extends Activity
- {
- private ListView mListView;
- private MyAdapter mAdapter;
- private List<String> mDatas = Arrays.asList("Hello", "Java", "Android");
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mListView = (ListView) findViewById(R.id.id_listview);
- mAdapter = new MyAdapter(
相關推薦
Android LayoutInflater深度解析 給你帶來全新的認識
本文出自:http://blog.csdn.net/lmj623565791/article/details/38171465 1、 題外話 相信大家對LayoutInflate都不陌生,特別在ListView的Adapter的getView方法中基本都會出現,使用inflate方法去
極速高清——給你帶來全新的高清視野
歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由騰訊雲視訊發表於雲+社群專欄 關注公眾號“騰訊雲視訊”,一鍵獲取 技術乾貨 | 優惠活動 | 視訊方案 歡迎來到吃雞戰場 很生氣!!!我才剛落地,就因遊戲介面糊了一下,阻止了我撿槍的步伐,就
微軟一年一度的開發者大會,給你帶來全新的開發者體驗
Build 2018 主旨演講的主題是 Azure 雲和 AI、物聯網、AR等技術,以及開發者相關內容的宣佈。在今天的Build大會上,微軟宣佈目前已有超過7億臺裝置執行Windows 10系統。去年這個數字為5億。Office 365目前每個月有1.35億活躍的商業使用者,去年為1.2億。 微軟今年Bui
你還在用 os.path?快來感受一下 pathlib 給你帶來的便捷吧!
相比常用的 os.path而言,pathlib 對於目錄路徑的操作更簡介也更貼近 Pythonic。但是它不單純是為了簡化操作,還有更大的用途 概述 pathlib 是Python內建庫,Python 文件給它的定義是 Object-oriented filesystem paths(面向物件的
TensorFlow Hub, 給您帶來全新的 Web 體驗
文 / André Susano Pinto(TensorFlow Hub 技術負責人)和 Clemens Mewald(產品經理) 來源 | TensorFlow 公眾號 在之前的文章中,我們釋出了 TensorFlow Hub,這是一個在 TensorFlo
Android DataBinding全解析,你該用這個框架了
前言: Data binding 在2015年7月釋出的Android Studio v1.3.0 版本上引入,在2016年4月Android Studio v2.0.0 上正式支援。目前為止,Data Binding 已經支援雙向綁定了。 Databind
Android Context完全解析,你所不知道的Context的各種細節
前幾篇文章,我也是費勁心思寫了一個ListView系列的三部曲,雖然在內容上可以說是絕對的精華,但是很多朋友都表示看不懂。好吧,這
深度解析多執行緒帶來的Android效能優化原理
Android 開發中多執行緒的必要性; Android 開發中,許多操作都需要由 主執行緒(UI 執行緒)來執行,比如: 系統事件(例如裝置狀態變動) 輸入事件 服務 鬧鐘 UI 繪製 … 我們經常需要針對這些情況編寫程式碼。 由於主執行緒只有一個
java執行緒深度解析(一)——java new 介面?匿名內部類給你答案
一、內部類 1、內部類初識 一般,一個類裡主要包含類的方法和屬性,但在java中還提出在類中繼續定義類(內部類)的概念。 內部類的定義:類的內部定義類 先來看一個例項 public class Ou
帶你深度解析Maven
.com ima 一個 html nta tps 實現 隱藏 read 一、What`s Maven? Maven是基於項目對象模型(POM project object model),可以通過一小段描述信息(配置)來管理項目的構建,報告和文檔的軟件項目管理工具,簡單
一文帶你深度解析騰訊雲直播答題方案
exc com erp 同學 col 測試 的確 影響 cep 歡迎大家前往雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 作者:騰訊視頻雲 進入2018年最火的新鮮事物無疑就是“直播答題”了,動輒上百萬的獎金更是吸引了大量用戶的參與。一場直播動輒幾百萬的獎金,每人可以分到
Android Service完全解析,關於服務你所需知道的一切(下)
並且 無法 數據類型 界面 其它 wid logcat listen 程序崩潰 文章轉載至:http://blog.csdn.net/guolin_blog/article/details/9797169 這是郭霖寫的.......就是寫 "第一行代碼"的那個厲害人物,大
你的Android手機能投屏到電腦上嗎?方法我都給你列出來了
and bsp linu 中文 電腦 接收 放音 系統 bin 共享屏幕正在一步一步的進入到我們的生活中,從最原始的手機-電視屏幕共享到現在的手機-電腦屏幕共享,這一規模正在逐步的擴散至全球的各個角落中,隨之的手機型號的不同,從symbian-Windows phone-F
你為什麽選擇在英國學習?它給我們帶來了什麽魅力?
也有 年輕人 全世界 學習 美麗 競爭力 貝爾 想要 數量 中國是世界上人口最多的國家。其龐大的人口基礎使得每年高考和研究生入學考試的數量仍然很高。競爭非常激烈。可以說,成千上萬的部隊渡過一座木橋並不算太多。尤其是高考,對於很多孩子來說,可以說是人生的第一分水嶺,高考的難度
Android LayoutInflater原理分析,帶你一步步深入瞭解View
有段時間沒寫部落格了,感覺都有些生疏了呢。最近繁忙的工作終於告一段落,又有時間寫文章了,接下來還會繼續堅持每一週篇的節奏。 有不少朋友跟我反應,都希望我可以寫一篇關於View的文章,講一講View的工作原理以及自定義View的方法。沒錯,承諾過的文章我是一定要兌現的,而且在View這個話題上我還
從頭到尾給你講明白Android View實現原理
Activity是Android開發者寫第一行程式碼起就開始接觸到的。而在onCreate方法中呼叫setContentView(R.layout.main_activity),恐怕也是絕大多數開發者的頭等任務。然後我們可以呼叫findViewById(R.id.xxx)來獲取佈局中的某
Android Service完全解析,關於服務你所需知道的一切(上)(筆記)
參考原文:Android Service完全解析,關於服務你所需知道的一切(上) Service的基本用法 然後新建一個MyService繼承自Service,並重寫父類的onCreate()、onStartCommand()和onDestroy()方法, 可以看到,在Sta
SIGAI 4P計劃【2.0】免費來襲,給你一個深度學習python的機會
SIGAI 4P計劃一期啟動以來,收到了小夥伴們的熱烈反響。共1017人加入計劃學習,其中70%學生使用者,28%企業使用者。不少小夥伴希望加入,但由於人員和管理的限制,一期不再開放。 但是,SIGAI怎麼能辜負同學們一顆想天天向上的好學之心呢?在大家的殷殷期待下,SIGAI總結一期4P計劃經驗
5年行業老手為你“深度解析”央行大力支援數字貨幣爆發的8大因素!
前言 如果說網際網路改變了人們的生活方式,淘寶改變了人們的消費方式,那麼數字資產的進場比看懂更重要,這是絕對是趨勢。真正懂得玩幣的人,他不會說懂,他會默默的去做,因為他心裡很清楚,趨勢就是一匹馬,你如果在馬後面追,你永遠都追不上,你只有騎在馬上面,才能和馬一樣的
《Spring原始碼深度解析》pdf附網盤下載連結送給還在迷茫的你
技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的