亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

自定義Adapter并通過布局泵LayoutInflater抓取layout模板編輯每一個item實現思路

2020-04-11 12:14:24
字體:
來源:轉載
供稿:網友
寫在前面的話:
看到標題這么長可能大家有點抓狂了,是的,我在剛剛學這一篇的時候有一些不理解,什么是布局泵?編輯每一個模板然后什么是自定義Adapter?下面我們開始學習這一篇的內容

首選上一張圖,實現效果:
 

邏輯解析:
首先上面這個圖是最終的實現效果了,有點像我們的通訊錄聯系人的排版方式,說一下layout的布局吧。很簡單,其實就是一個ListView組件。但是這個ListView組件用的Adapter有一點不同。我們自己定義了一個adapter并且通過getview方法對每一個條目進行了編輯和排版。然后最后將我們自定義的Adapter放入到了我們的ListView中以實現展示了這種效果下面我給出這個實現的重要代碼片段,然后加以分析

代碼分析:
第一步:理解全局變量
復制代碼 代碼如下:

/****
* 其中listtag是分類的分割標簽,每個組的head
*/
private List<String> list = null; //存放聯系人數據的list
private List<String> listtag = null; //存放字母的數據的list
private GroupListAdapter adapter = null; //自定義的Adapter對象
private ListView listView = null; //主layout中用到的listview

第二步:MainActivity的onCreate方法處理
復制代碼 代碼如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setData(); //初始化聯系人和首字母的數據
adapter = new GroupListAdapter(this, list, listtag); //[重要],將每一個item重寫排版和編輯得到信息view之后放到adapter里面
//將我們自定義的adapter放到listview里面
listView = (ListView) findViewById(R.id.listView1);
listView.setAdapter(adapter);
}

說明:注釋中寫的很清楚,我們總共就做了這幾個邏輯處理,看到這里還不夠清楚,帶著我們的疑問往下看一步步的就清楚了。

第三步:初始化list數據(比較簡單)
復制代碼 代碼如下:

//插入要顯示的數據。listtag是聯系人上面的分組ABCD。list為聯系人數據
public void setData() {
list = new ArrayList<String>();
listtag = new ArrayList<String>();
list.add("A");
listtag.add("A");
for (int i = 0; i < 4; i++) {
list.add("阿波次的" + i);
}
list.add("B");
listtag.add("B");
for (int i = 0; i < 4; i++) {
list.add("波士頓" + i);
}
list.add("C");
listtag.add("C");
for (int i = 0; i < 4; i++) {
list.add("車轍" + i);
}
}

第四步:自定義Adapter(重要)
復制代碼 代碼如下:

//自定義listAdapter,利用布局泵的方式定義每一個listview條目
private static class GroupListAdapter extends ArrayAdapter<String> {
private List<String> listTag = null;

public GroupListAdapter(Context context, List<String> objects,
List<String> tags) {
super(context, 0, objects);
this.listTag = tags;
}

//禁用標簽項的選擇事件
@Override
public boolean isEnabled(int position) {
if (listTag.contains(getItem(position))) {
return false;
}
return super.isEnabled(position);
}

//本方法是迭代的,迭代對象為構造方法第二個對象,依次取出每一個list條目,(重寫就會執行)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (listTag.contains(getItem(position))) {
view = LayoutInflater.from(getContext()).inflate(
R.layout.group_list_item_tag, null);
} else {
view = LayoutInflater.from(getContext()).inflate(
R.layout.group_list_item, null);
}
TextView textView = (TextView) view
.findViewById(R.id.group_list_item_text);
textView.setText(getItem(position));
return view;
}
}

說明:
OK,第四步可以說是我們整個功能的核心部分了,注意我們是繼承了一個ArrayAdapter,然后重寫了兩個方法。首先注意這兩個方法的作用,注釋上給了很清楚,如果大家看不懂可以刪除掉方法然后跑一跑程序加深一下理解。就明白這兩個方法是做什么的了。注意:重寫的方法一旦重寫就肯定會執行,
單獨說一下getview方法吧。你可以想象一下放個方法在我們定義的list對象的for循環迭代里面然后就存在了下面的關系
Position = I;
View = listview中應用的每一個viewitem
既然這樣我想大家應該很容易看明白了。在迭代的同時利用當前的position對應的item和listTag對象去做對比。如果存在在這個其中就說明是標題行,那么就用布局泵拿到標題行對應的layout里面的view然后編輯該view為對應的方式。不存在就是普通的聯系人行。這么說您懂了嗎?
在經過了上面的這個處理之后我們再將每一個行view放到adapter中去。然后形成了我們最終的效果
Layout文件:
主layout:
1、activity_main.xml文件
復制代碼 代碼如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
>
</ListView>
</LinearLayout>

模板layout文件:
1、 group_list_item_tag.xml文件 [聯系人layout模板]
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- 聯系人layout模板 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#555555"
android:paddingLeft="10dip">
<TextView
android:id="@+id/group_list_item_text"
android:layout_width="wrap_content"
android:layout_height="20dip"
android:textColor="#ffffff"
android:gravity="center_vertical"/>
</LinearLayout>

2、 group_list_item.xml 文件標題行layout模板
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dip">
<!-- 圖片和文字 -->
<!-- 隨便放了一張圖片,稍微美化一下 -->
<ImageView
android:src="@drawable/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/group_list_item_text"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:paddingLeft="5dip"
android:gravity="center_vertical"/>
</LinearLayout>

最后的說明:
后面的2個模板只是對應listview的每一個item的。希望大家理解。
源碼下載
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国语自产在线不卡| 2019中文字幕在线| 久久久在线免费观看| 亚洲丝袜一区在线| 视频在线一区二区| 亚洲激情久久久| 中文字幕亚洲无线码a| 国产日本欧美一区| 国产精品亚洲欧美导航| 国产偷亚洲偷欧美偷精品| 亚洲伊人成综合成人网| 久久久999精品| 亚洲国产精彩中文乱码av| 97久久久久久| 菠萝蜜影院一区二区免费| 91禁国产网站| 欧美日韩综合视频| 国产精品久久久久久久7电影| 国产精品久久久久久av| 亚洲欧美国产精品va在线观看| 国产一区二区三区网站| 羞羞色国产精品| 久久久91精品国产| 久久久久久久久久亚洲| 成人美女av在线直播| 日韩经典第一页| 久久久亚洲国产天美传媒修理工| 亚洲精品在线视频| 亚洲深夜福利在线| 日韩中文字幕网站| 久久久久久亚洲精品不卡| 国产精品1区2区在线观看| 亚洲美女在线视频| 成人黄色短视频在线观看| 麻豆一区二区在线观看| 51精品国产黑色丝袜高跟鞋| 亚洲精品中文字| 日韩精品极品视频免费观看| 精品香蕉在线观看视频一| 色婷婷综合成人| 日av在线播放中文不卡| 川上优av一区二区线观看| 日韩中文字幕国产精品| 欧美黑人狂野猛交老妇| 77777少妇光屁股久久一区| 久久久久久一区二区三区| 久久国产精品久久久久久| 国产v综合v亚洲欧美久久| 国产日韩欧美一二三区| 欧美性感美女h网站在线观看免费| 国产美女久久精品| 成人做爽爽免费视频| 亚洲综合在线中文字幕| 最好看的2019的中文字幕视频| 国产一区二区黄| 国产精品无av码在线观看| 欧美在线精品免播放器视频| xxx成人少妇69| 久久久免费精品视频| 亚洲第一福利网| 亚洲bt天天射| 久久久女人电视剧免费播放下载| 欧美伊久线香蕉线新在线| 成人黄色在线免费| 欧美性理论片在线观看片免费| 欧美日韩亚洲天堂| 久久成年人视频| 欧美精品激情在线观看| 欧美久久精品午夜青青大伊人| 国产在线播放不卡| 欧美日韩激情网| 国产精品盗摄久久久| 中文字幕亚洲欧美一区二区三区| 在线观看成人黄色| 国产精品青草久久久久福利99| 中文字幕日韩视频| 欧美激情伊人电影| 国产黑人绿帽在线第一区| 国产欧美精品一区二区三区介绍| 欧美电影在线免费观看网站| 久久精品视频在线| 国内精品视频一区| 亚洲人成电影网站色www| 精品毛片三在线观看| 欧美高清视频一区二区| 欧美成人激情在线| 亚洲精品久久久一区二区三区| 欧美一级免费看| 欧美成人精品在线播放| 欧美黑人性视频| 国产丝袜一区二区三区| 欧美在线一区二区视频| 久久高清视频免费| 97婷婷涩涩精品一区| 91极品视频在线| 欧美一级片一区| 亚洲成人av片| 少妇高潮久久久久久潘金莲| 欧美国产亚洲精品久久久8v| 午夜精品久久久久久久男人的天堂| 欧美日韩美女在线观看| 欧美成人免费网| 亚洲视频第一页| 91香蕉嫩草神马影院在线观看| 成人乱人伦精品视频在线观看| 精品网站999www| 久久久精品久久久| 久久久久久97| 亚洲精品中文字幕女同| 国产精品视频播放| 毛片精品免费在线观看| 午夜精品在线观看| 精品综合久久久久久97| 亚洲精品久久久久久久久久久久| 91中文在线观看| 中文字幕欧美日韩va免费视频| 亚洲精品动漫久久久久| 国产第一区电影| 久久成人综合视频| 欧美成人免费视频| 成人精品久久一区二区三区| 日韩高清有码在线| 国产一区二区三区日韩欧美| 亚洲国产精品999| 国产精品吹潮在线观看| 国产精品嫩草影院一区二区| 久久久久国产精品免费| 成人在线中文字幕| 欧美日韩精品在线播放| 国产在线a不卡| 久久久久久一区二区三区| 97免费中文视频在线观看| 国产中文欧美精品| 欧美日韩免费在线| 国产亚洲精品久久久优势| 91亚洲国产精品| 亚洲国产精品久久久久秋霞蜜臀| 亚洲大尺度美女在线| 国产成人啪精品视频免费网| 在线播放日韩av| 日韩电视剧免费观看网站| 日韩av电影在线免费播放| 国产一区二区三区丝袜| 欧美亚洲在线播放| 91免费看片网站| 久久黄色av网站| 欧美一级高清免费播放| 亚洲成人网在线观看| 国产热re99久久6国产精品| 欧美性极品xxxx娇小| 日本免费久久高清视频| 国产成人精品视| 久久成人亚洲精品| 亚洲的天堂在线中文字幕| 欧美一区三区三区高中清蜜桃| 成人精品一区二区三区电影黑人| 日韩精品中文字幕在线| 亚洲精品中文字幕有码专区| 日韩有码片在线观看| 久久中文字幕国产| 亚洲欧美另类自拍| 视频在线观看一区二区| 国产精品亚洲片夜色在线| 欧美电影《睫毛膏》|