極力推薦文章:歡迎收藏
Android 干貨分享
本篇文章主要介紹 Android 開發(fā)中的部分知識(shí)點(diǎn),通過閱讀本篇文章,您將收獲以下內(nèi)容:
ListView主要使用方法
使用android:entries 為L(zhǎng)istView準(zhǔn)備數(shù)據(jù)
使用List 為L(zhǎng)istView 準(zhǔn)備數(shù)據(jù)
為L(zhǎng)istView 添加頭,尾,以及空布局
使用SimpleAdapter 為L(zhǎng)istview 適配圖文
使用BaseAdapter 為L(zhǎng)istview適配圖文
ListView 分類顯示
ListView 是Android 中顯示數(shù)據(jù)常用的控件之一,主要用于顯示一個(gè)垂直滾動(dòng)的數(shù)據(jù)集合,隨著Android 手機(jī)對(duì)性能要求越來越高,一個(gè)更現(xiàn)代,更靈活,顯示列表性能更優(yōu)異的RecyclerView將會(huì)逐漸取代ListView的數(shù)據(jù)顯示方式,但是目前為止,ListView 在開發(fā)中還是十分常見的,并未被棄用。
ListView 簡(jiǎn)介 ListView 繼承關(guān)系如下:java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.AdapterViewListView 常用XML屬性? android.widget.AbsListView ? android.widget.ListView
android:divider
android:dividerHeight
android:entries
android:footerDividersEnabled
android:headerDividersEnabled
1.ListView主要使用方法如下:ListView 常用來顯示同分類數(shù)據(jù),常用使用方法如下:
1. 準(zhǔn)備數(shù)據(jù)源List mAddHeaderFooterList = new ArrayList2.將數(shù)據(jù)源添加到適配器中();
ArrayAdapter adapter = new ArrayAdapter3. 將適配器中的數(shù)據(jù)添加到ListView 中(this, android.R.layout.simple_list_item_1, mAddHeaderFooterList);
mListView.setAdapter(adapter);
# 2. 使用android:entries 為L(zhǎng)istView準(zhǔn)備數(shù)據(jù)
實(shí)現(xiàn)效果如下
實(shí)現(xiàn)代碼如下
在Listview標(biāo)簽中直接用數(shù)組為ListView 填充數(shù)據(jù)
entries 屬性使用方法:
填充數(shù)據(jù)如下
array 數(shù)組資源
- 北京
- 上海
- 廣州
- 深圳
- 鄭州
- 成都
# 3. 使用List 為L(zhǎng)istView 準(zhǔn)備數(shù)據(jù)
實(shí)現(xiàn)效果如下
部分實(shí)現(xiàn)代碼如下:
public void ListViewArrayList(View view) { ClearAllView(); mListViewArray.setVisibility(View.VISIBLE); // 1.準(zhǔn)備數(shù)據(jù)源 final String[] citys = getResources().getStringArray(R.array.citys); // 2.將數(shù)據(jù)源加載到適配器中 // ArrayAdapter adapter = new ArrayAdapter(ListViewMethods.this, // android.R.layout.simple_expandable_list_item_1, citys); // 3.將適配器中的數(shù)據(jù)加載到ListView控件中 mArrayList = Arrays.asList(citys); ArrayAdapter adapter = new ArrayAdapter (ListViewMethods.this, android.R.layout.simple_expandable_list_item_1, mArrayList); mListViewArray.setAdapter(adapter); }
# 4. 為L(zhǎng)istView 添加頭,尾,以及空布局
實(shí)現(xiàn)效果如下
主要方法如下:
1. 添加頭布局方法ListView.addHeaderView(View)2.添加尾布局方法
ListView.addFooterView(View)3. ListView數(shù)據(jù)為空時(shí), 設(shè)置空布局方法
ListView.setEmptyView(View)
效果圖實(shí)現(xiàn)代碼如下
public void ListViewHAddHeaderFooter(View view) { ClearAllView(); mListAddHeadFooter.setVisibility(View.VISIBLE); // 準(zhǔn)備數(shù)據(jù)源 mAddHeaderFooterList = new ArrayList5. 使用SimpleAdapter 為L(zhǎng)istview 適配圖文(); for (int i = 0; i < 6; i++) { mAddHeaderFooterList.add("測(cè)試" + i); } // 將數(shù)據(jù)源添加到適配器中 final ArrayAdapter adapter = new ArrayAdapter ( ListViewMethods.this, android.R.layout.simple_list_item_1, mAddHeaderFooterList); // 添加listview 頭 imageHeader = new ImageView(this); imageHeader.setLayoutParams(new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); imageHeader.setImageResource(R.drawable.gril); imageHeader.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int index = mAddHeaderFooterList.size(); for (int i = index; i < index + 20; i++) { mAddHeaderFooterList.add("加載更多數(shù)據(jù)內(nèi)容" + i); } adapter.notifyDataSetChanged(); } }); mListAddHeadFooter.addHeaderView(imageHeader); // 添加listview 尾 btnFooter = new Button(this); btnFooter.setLayoutParams(new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); btnFooter.setText("點(diǎn)擊加載更多"); btnFooter.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { int index = mAddHeaderFooterList.size(); for (int i = index; i < index + 20; i++) { mAddHeaderFooterList.add("加載更多" + i); } adapter.notifyDataSetChanged(); } }); mListAddHeadFooter.addFooterView(btnFooter); TextView tv = new TextView(this); tv.setLayoutParams(new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); tv.setText("數(shù)據(jù)為空"); mListAddHeadFooter.setEmptyView(tv); // 將適配器中的數(shù)據(jù)添加到ListView 中 mListAddHeadFooter.setAdapter(adapter); }
實(shí)現(xiàn)效果如下
實(shí)現(xiàn)代碼如下
public void ListViewSimpleAdapter(View view) { ClearAllView(); mListViewSimple.setVisibility(View.VISIBLE); int[] images = { R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril, }; mSimpleList = new ArrayList
使用的item 布局如下
6. 使用BaseAdapter 為L(zhǎng)istview適配圖文
實(shí)現(xiàn)效果如下
-實(shí)現(xiàn)代碼如下
public void ListViewBaseAdapter(View view) { ClearAllView(); mListViewBase.setVisibility(View.VISIBLE); mBaseAdapterList = new ArrayList
自定義適配器實(shí)現(xiàn)的方法
class MyBaseAdapter extends BaseAdapter { // 當(dāng)前適配器中加載數(shù)據(jù)的總條目 @Override public int getCount() { return mBaseAdapterList.size(); } // 根據(jù)指定下標(biāo)獲取對(duì)應(yīng)item 的view @Override public Object getItem(int position) { return mBaseAdapterList.get(position); } // 根據(jù)指定下標(biāo)獲取當(dāng)前item的id @Override public long getItemId(int position) { return position; } /** * 獲取適配器控件中的View對(duì)象,得到用于展示數(shù)據(jù)的視圖 int position,:當(dāng)前item的下標(biāo) View convertView, * 表示可復(fù)用的View ViewGroup parent 當(dāng)前繪制的item 所屬的listview */ @Override public View getView(int position, View convertView, ViewGroup parent) { // 表示第一次運(yùn)行創(chuàng)建,否則復(fù)用view if (convertView == null) { convertView = LayoutInflater.from(ListViewMethods.this) .inflate(R.layout.listview_item_img_tv, null); mHolder = new Holder(); mHolder.tv = (TextView) convertView.findViewById(R.id.tv); mHolder.img = (ImageView) convertView.findViewById(R.id.img); convertView.setTag(mHolder); } else { // 進(jìn)行復(fù)用 mHolder = (Holder) convertView.getTag(); } mHolder.tv.setText((String) mBaseAdapterList.get(position).get( "text")); mHolder.img.setImageResource((Integer) mBaseAdapterList.get( position).get("img")); return convertView; } } class Holder { public TextView tv; public ImageView img; }
使用的item 布局如下
7. ListView 分類顯示
實(shí)現(xiàn)效果如下:
實(shí)現(xiàn)代碼如下:
public void ListViewTypeBaseAdapter(View view) { ClearAllView(); mListViewType.setVisibility(View.VISIBLE); MyTypeBaseAdapter myTypeBaseAdapter = new MyTypeBaseAdapter(); mListViewType.setAdapter(myTypeBaseAdapter); } class MyTypeBaseAdapter extends BaseAdapter { private String[] tittles = { "分類一 :水果", "分類二 :蔬菜" }; private String[] mTypeOneList = { "蘋果", "香蕉", "梨", "西瓜", "菠蘿" }; private String[] mTypeTwoList = { "番茄", "土豆", "大蔥", "辣椒", "蓮藕", "白菜", "蘿卜", "豆角", "芹菜", "茄子" }; int[] typeOneImages = { R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril }; int[] typeTwoImages = { R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril, R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril }; @Override public int getCount() { return mTypeOneList.length + mTypeTwoList.length + 2; } @Override public Object getItem(int position) { if (position == 0 || position == mTypeOneList.length + 1) { return 0; } else { if (position < mTypeOneList.length + 1) { return mTypeOneList[position]; } else { return mTypeTwoList[position - mTypeOneList.length - 2]; } } } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { int mode = getItemViewType(position); if (mode == 0) { ViewTitleHolder holder = null; if (convertView == null) { convertView = View.inflate(getApplicationContext(), R.layout.listview_type_tv, null); holder = new ViewTitleHolder(); holder.textView = (TextView) convertView .findViewById(R.id.tv); convertView.setTag(holder); } else { holder = (ViewTitleHolder) convertView.getTag(); } if (position == 0) { holder.textView.setText(tittles[position]); } else { holder.textView.setText(tittles[1]); } return convertView; } else { ViewHolder holder = null; if (convertView == null) { convertView = View.inflate(getApplicationContext(), R.layout.listview_item_img_tv, null); holder = new ViewHolder(); holder.imageView = (ImageView) convertView .findViewById(R.id.img); holder.textView = (TextView) convertView .findViewById(R.id.tv); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (position < mTypeOneList.length + 1) { holder.textView.setText(mTypeOneList[position - 1]); holder.imageView .setImageResource(typeOneImages[position - 1]); } else { holder.textView.setText(mTypeTwoList[position - mTypeOneList.length - 2]); holder.imageView.setImageResource(typeTwoImages[position - mTypeOneList.length - 2]); } return convertView; } } @Override public int getItemViewType(int position) { if (position == 0 || position == mTypeOneList.length + 1) { return 0; } else { return 1; } } @Override public int getViewTypeCount() { return super.getViewTypeCount() + 1; } } static class ViewHolder { ImageView imageView; TextView textView; } static class ViewTitleHolder { TextView textView; }
使用的item 布局如下
至此,本篇已結(jié)束,如有不對(duì)的地方,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75849.html
摘要:簡(jiǎn)介繼承關(guān)系如下主要使用方法主要通過使用自定義來適配數(shù)據(jù),進(jìn)而顯示到中。如果不是太明白,可以查看上篇文章使用詳解至此,本篇已結(jié)束,如有不對(duì)的地方,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝 極力推薦文章:歡迎收藏Android 干貨分享 showImg(https://segmentfault.com/img/remote/1460000019975020); 閱讀五分...
摘要:本教程首先介紹兩個(gè)項(xiàng)目中遇到的通用視圖和。語句的作用是添加了到上下文中,還要把默認(rèn)的一些上下文變量也返回給視圖函數(shù),以便其后續(xù)處理。 通過三周的時(shí)間我們開發(fā)了一個(gè)簡(jiǎn)單的個(gè)人 Blog,教程地址: 第一周:Django 學(xué)習(xí)小組:博客開發(fā)實(shí)戰(zhàn)第一周教程 —— 編寫博客的 Model 和首頁面 第二周:Django 學(xué)習(xí)小組:博客開發(fā)實(shí)戰(zhàn)第二周教程 —— 博客詳情頁面和分類頁面 第三周:D...
摘要:獲取短信內(nèi)容的方法短信內(nèi)容數(shù)據(jù)也是系統(tǒng)提供的,獲取方法如下獲取方法如下微信公眾號(hào)程序員插入數(shù)據(jù)測(cè)試數(shù)據(jù)中。。。。。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 極力推薦文章:歡迎收藏Android 干貨分享 showImg(https://segmentfault.com/img/...
摘要:寫給讀者的話本人是千千萬萬前端小白中的一員,所以對(duì)前端小白的痛苦感同身受,面對(duì)一個(gè)新的知識(shí)點(diǎn),很多時(shí)候感到束手無策。 寫給讀者的話 本人是千千萬萬前端小白中的一員,所以對(duì)前端小白的痛苦感同身受,面對(duì)一個(gè)新的知識(shí)點(diǎn),很多時(shí)候感到束手無策。網(wǎng)上搜資料,有的不全,有的看不懂,所以本人作為小白,很有義務(wù)將自己覺得理解了的知識(shí)點(diǎn)盡可能的解釋的通熟易懂,恨不得一個(gè)字一個(gè)字的解釋。但是別人的終究是別...
摘要:如果沒有碰撞結(jié)果,那么通過將事件分發(fā)到全局處理。提供手勢(shì)事件競(jìng)技信息的實(shí)體,內(nèi)封裝參與事件競(jìng)技的成員。這樣勝利的會(huì)通過回調(diào)到中,設(shè)置為標(biāo)志為勝利區(qū)域,然后執(zhí)行和發(fā)出事件響應(yīng)觸發(fā)給這個(gè)控件。本篇將帶你深入了解 Flutter 中的手勢(shì)事件傳遞、事件分發(fā)、事件沖突競(jìng)爭(zhēng),滑動(dòng)流暢等等的原理,幫你構(gòu)建一個(gè)完整的 Flutter 閉環(huán)手勢(shì)知識(shí)體系,這也許是目前最全面的手勢(shì)事件和滑動(dòng)源碼的深入文章了。 ...
閱讀 4006·2023-04-26 02:13
閱讀 2249·2021-11-08 13:13
閱讀 2737·2021-10-11 10:59
閱讀 1737·2021-09-03 00:23
閱讀 1307·2019-08-30 15:53
閱讀 2285·2019-08-28 18:22
閱讀 3057·2019-08-26 10:45
閱讀 735·2019-08-23 17:58