極力推薦文章:歡迎收藏
Android 干貨分享
本篇文章主要介紹 Android 開發中的部分知識點,通過閱讀本篇文章,您將收獲以下內容:
ListView主要使用方法
使用android:entries 為ListView準備數據
使用List 為ListView 準備數據
為ListView 添加頭,尾,以及空布局
使用SimpleAdapter 為Listview 適配圖文
使用BaseAdapter 為Listview適配圖文
ListView 分類顯示
ListView 是Android 中顯示數據常用的控件之一,主要用于顯示一個垂直滾動的數據集合,隨著Android 手機對性能要求越來越高,一個更現代,更靈活,顯示列表性能更優異的RecyclerView將會逐漸取代ListView的數據顯示方式,但是目前為止,ListView 在開發中還是十分常見的,并未被棄用。
ListView 簡介 ListView 繼承關系如下: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 常用來顯示同分類數據,常用使用方法如下:
1. 準備數據源List mAddHeaderFooterList = new ArrayList2.將數據源添加到適配器中();
ArrayAdapter adapter = new ArrayAdapter3. 將適配器中的數據添加到ListView 中(this, android.R.layout.simple_list_item_1, mAddHeaderFooterList);
mListView.setAdapter(adapter);
# 2. 使用android:entries 為ListView準備數據
實現效果如下
實現代碼如下
在Listview標簽中直接用數組為ListView 填充數據
entries 屬性使用方法:
填充數據如下
array 數組資源
- 北京
- 上海
- 廣州
- 深圳
- 鄭州
- 成都
# 3. 使用List 為ListView 準備數據
實現效果如下
部分實現代碼如下:
public void ListViewArrayList(View view) { ClearAllView(); mListViewArray.setVisibility(View.VISIBLE); // 1.準備數據源 final String[] citys = getResources().getStringArray(R.array.citys); // 2.將數據源加載到適配器中 // ArrayAdapter adapter = new ArrayAdapter(ListViewMethods.this, // android.R.layout.simple_expandable_list_item_1, citys); // 3.將適配器中的數據加載到ListView控件中 mArrayList = Arrays.asList(citys); ArrayAdapter adapter = new ArrayAdapter (ListViewMethods.this, android.R.layout.simple_expandable_list_item_1, mArrayList); mListViewArray.setAdapter(adapter); }
# 4. 為ListView 添加頭,尾,以及空布局
實現效果如下
主要方法如下:
1. 添加頭布局方法ListView.addHeaderView(View)2.添加尾布局方法
ListView.addFooterView(View)3. ListView數據為空時, 設置空布局方法
ListView.setEmptyView(View)
效果圖實現代碼如下
public void ListViewHAddHeaderFooter(View view) { ClearAllView(); mListAddHeadFooter.setVisibility(View.VISIBLE); // 準備數據源 mAddHeaderFooterList = new ArrayList5. 使用SimpleAdapter 為Listview 適配圖文(); for (int i = 0; i < 6; i++) { mAddHeaderFooterList.add("測試" + i); } // 將數據源添加到適配器中 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("加載更多數據內容" + 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("點擊加載更多"); 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("數據為空"); mListAddHeadFooter.setEmptyView(tv); // 將適配器中的數據添加到ListView 中 mListAddHeadFooter.setAdapter(adapter); }
實現效果如下
實現代碼如下
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 為Listview適配圖文
實現效果如下
-實現代碼如下
public void ListViewBaseAdapter(View view) { ClearAllView(); mListViewBase.setVisibility(View.VISIBLE); mBaseAdapterList = new ArrayList
自定義適配器實現的方法
class MyBaseAdapter extends BaseAdapter { // 當前適配器中加載數據的總條目 @Override public int getCount() { return mBaseAdapterList.size(); } // 根據指定下標獲取對應item 的view @Override public Object getItem(int position) { return mBaseAdapterList.get(position); } // 根據指定下標獲取當前item的id @Override public long getItemId(int position) { return position; } /** * 獲取適配器控件中的View對象,得到用于展示數據的視圖 int position,:當前item的下標 View convertView, * 表示可復用的View ViewGroup parent 當前繪制的item 所屬的listview */ @Override public View getView(int position, View convertView, ViewGroup parent) { // 表示第一次運行創建,否則復用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 { // 進行復用 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 分類顯示
實現效果如下:
實現代碼如下:
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 布局如下
至此,本篇已結束,如有不對的地方,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75849.html
摘要:簡介繼承關系如下主要使用方法主要通過使用自定義來適配數據,進而顯示到中。如果不是太明白,可以查看上篇文章使用詳解至此,本篇已結束,如有不對的地方,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝 極力推薦文章:歡迎收藏Android 干貨分享 showImg(https://segmentfault.com/img/remote/1460000019975020); 閱讀五分...
摘要:本教程首先介紹兩個項目中遇到的通用視圖和。語句的作用是添加了到上下文中,還要把默認的一些上下文變量也返回給視圖函數,以便其后續處理。 通過三周的時間我們開發了一個簡單的個人 Blog,教程地址: 第一周:Django 學習小組:博客開發實戰第一周教程 —— 編寫博客的 Model 和首頁面 第二周:Django 學習小組:博客開發實戰第二周教程 —— 博客詳情頁面和分類頁面 第三周:D...
摘要:獲取短信內容的方法短信內容數據也是系統提供的,獲取方法如下獲取方法如下微信公眾號程序員插入數據測試數據中。。。。。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 極力推薦文章:歡迎收藏Android 干貨分享 showImg(https://segmentfault.com/img/...
摘要:寫給讀者的話本人是千千萬萬前端小白中的一員,所以對前端小白的痛苦感同身受,面對一個新的知識點,很多時候感到束手無策。 寫給讀者的話 本人是千千萬萬前端小白中的一員,所以對前端小白的痛苦感同身受,面對一個新的知識點,很多時候感到束手無策。網上搜資料,有的不全,有的看不懂,所以本人作為小白,很有義務將自己覺得理解了的知識點盡可能的解釋的通熟易懂,恨不得一個字一個字的解釋。但是別人的終究是別...
摘要:如果沒有碰撞結果,那么通過將事件分發到全局處理。提供手勢事件競技信息的實體,內封裝參與事件競技的成員。這樣勝利的會通過回調到中,設置為標志為勝利區域,然后執行和發出事件響應觸發給這個控件。本篇將帶你深入了解 Flutter 中的手勢事件傳遞、事件分發、事件沖突競爭,滑動流暢等等的原理,幫你構建一個完整的 Flutter 閉環手勢知識體系,這也許是目前最全面的手勢事件和滑動源碼的深入文章了。 ...
閱讀 4015·2023-04-26 02:13
閱讀 2260·2021-11-08 13:13
閱讀 2748·2021-10-11 10:59
閱讀 1745·2021-09-03 00:23
閱讀 1314·2019-08-30 15:53
閱讀 2293·2019-08-28 18:22
閱讀 3061·2019-08-26 10:45
閱讀 744·2019-08-23 17:58