編輯:關於android開發
一、ListView的理解
1.什麼ListView?
一種用來顯示多個可滑動項(Item)列表的的ViewGroup
需要使用Adapter將集合數據和每一個Item所對應的布局動態適配到ListView中顯示
顯示列表: listView.setAdapter(adapter)
更新列表: adapter.notifyDataSetChanged()
二、實現ListView的三種常用方式
1、ArrayAdapter應用
ArrayAdapter(Context context,int resource,T[] objects)
ArrayAdapter(Context context,int resource,List<T> objects)
context:上下文對象,一般為Activity對象
resourcce:Item的布局文件標識
objects:需要顯示的數據集合
2.案例
1.創建一個 layout xml文件
1 <ListView xmlns:android="http://schemas.android.com/apk/res/android" 2 android:id="@+id/listView1" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 > 6 7 </ListView>
2.創建 layout 文件 布局 ListView 子元素 items
1 <?xml version="1.0" encoding="utf-8"?> 2 <TextView xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="50dp" 5 android:layout_marginLeft="20sp" 6 android:gravity="fill_vertical" 7 android:id="@+id/item_adapter" > 8 </TextView>
3. 代碼實現
1 package com.example.android_ui_listview;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.widget.ArrayAdapter;
6 import android.widget.ListView;
7
8 public class MainActivity extends Activity {
9 @Override
10 protected void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.activity_adapter);
13
14 // 初始化控件
15 ListView adapter_lv = (ListView) findViewById(R.id.listView1);
16 // 1.准備集合數據
17 String[] strs = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "09",
18 "89", "77", "55", "ut", "sd", "gj", "gjk", "qw", "jhk" };
19 // 2.准備ArrayAdapter對象
20 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
21 R.layout.adapter_item, strs);
22 // 3.設置Adapter顯示列表
23 adapter_lv.setAdapter(adapter);
24 }
25 }
效果:

2、SimpleAdapter應用
SimpleAdapter(Context context,List<? entends Map<String,?>> data,int resource,String[] from,int[] to)
context:上下文對象,一般為Activity對象
data:需要顯示的數據集合
resource:Item布局文件的標識
from:Map對象的Key的數組,用於得到對應的value
to:Item布局文件中的子View的id的數組
1).創建 layout
1 <ListView xmlns:android="http://schemas.android.com/apk/res/android" 2 android:id="@+id/listView1" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 > 6 7 </ListView>
2). item 布局
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="horizontal" 6 android:id="@+id/simple_adapter"> 7 8 <ImageView 9 android:id="@+id/siple_iv" 10 android:layout_width="60dp" 11 android:layout_height="70dp" 12 android:src="@drawable/ic_launcher" /> 13 14 <LinearLayout 15 android:layout_width="wrap_content" 16 android:layout_height="69dp" 17 android:layout_marginRight="15dp" 18 android:gravity="center_vertical" 19 android:orientation="vertical"> 20 21 <TextView 22 android:id="@+id/siple_tv1" 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:text="@string/adapter_test" /> 26 27 <TextView 28 android:id="@+id/siple_tv2" 29 android:layout_width="wrap_content" 30 android:layout_height="wrap_content" 31 android:text="@string/adapter_number" /> 32 </LinearLayout> 33 34 </LinearLayout>
3)代碼實現
1 package com.example.android_ui_listview;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import android.app.Activity;
9 import android.os.Bundle;
10 import android.widget.ListView;
11 import android.widget.SimpleAdapter;
12
13 public class MainActivity extends Activity {
14 @Override
15 protected void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.activity_adapter);
18 // 初始化控件ListView
19 ListView listView = (ListView) findViewById(R.id.listView1) ;
20
21 //1.准備數據
22 List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ;
23 for(int i=0;i<10;i++){
24 Map<String,Object> map = new HashMap<String,Object>() ;
25 // key對應的from數組
26 map.put("siple_iv", R.drawable.ic_launcher) ;
27 map.put("siple_tv1", "價格:"+(i*3+0.1)) ;
28 map.put("siple_tv2", i+100) ;
29 list.add(map) ;
30 }
31
32 //2.准備SimpleAdapter對象
33 // 准白
34 String[] from = { "siple_iv", "siple_tv1", "siple_tv2" };
35 // 對應 Item 子樣式 裡面控件的id
36 int[] to = { R.id.siple_iv, R.id.siple_tv1,R.id.siple_tv2} ;
37 SimpleAdapter simpleAdapter = new SimpleAdapter(this, list,R.layout.siple_adapter, from, to) ;
38
39 //3.添加到listView裡面
40 listView.setAdapter(simpleAdapter) ;
41 }
42 }
4).

3、BaseAdapter(抽象類)應用
public view getView(int position,View converView,ViewGroup parent)
返回指定下標所對應的item的View對象
position:下標
converView:可復用的緩存Item視圖對象,前n+1個為null
parent:ListView對象
1.layout xml配置
1 <ListView xmlns:android="http://schemas.android.com/apk/res/android" 2 android:id="@+id/listView1" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 > 6 7 </ListView>
2.ListView子元素 item 布局
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="horizontal" 6 android:id="@+id/simple_adapter"> 7 8 <ImageView 9 android:id="@+id/siple_iv" 10 android:layout_width="60dp" 11 android:layout_height="70dp" 12 android:src="@drawable/ic_launcher" /> 13 14 <LinearLayout 15 android:layout_width="wrap_content" 16 android:layout_height="69dp" 17 android:layout_marginRight="15dp" 18 android:gravity="center_vertical" 19 android:orientation="vertical"> 20 21 <TextView 22 android:id="@+id/siple_tv1" 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:text="@string/adapter_test" /> 26 27 <TextView 28 android:id="@+id/siple_tv2" 29 android:layout_width="wrap_content" 30 android:layout_height="wrap_content" 31 android:text="@string/adapter_number" /> 32 </LinearLayout> 33 34 </LinearLayout>
3.創建一個簡單實體類
1 package com.example.android_ui_listview;
2
3 public class ShopInfo {
4 private int image ; //圖片
5 private String sname ; //名稱
6 private String price ; //價格
7
8 public ShopInfo() {
9 super();
10 }
11 public ShopInfo(int image, String sname, String price) {
12 super();
13 this.image = image;
14 this.sname = sname;
15 this.price = price;
16 }
17 public int getImage() {
18 return image;
19 }
20 public void setImage(int image) {
21 this.image = image;
22 }
23 public String getSname() {
24 return sname;
25 }
26 public void setSname(String sname) {
27 this.sname = sname;
28 }
29 public String getPrice() {
30 return price;
31 }
32 public void setPrice(String price) {
33 this.price = price;
34 }
35 }
4.activity實現
1 package com.example.android_ui_listview;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import android.app.Activity;
7 import android.os.Bundle;
8 import android.view.View;
9 import android.view.ViewGroup;
10 import android.widget.BaseAdapter;
11 import android.widget.ImageView;
12 import android.widget.ListView;
13 import android.widget.TextView;
14
15
16 public class MainActivity extends Activity {
17 List<ShopInfo> list ;
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_adapter);
22
23 // 初始化 ListView
24 ListView listView = (ListView) findViewById(R.id.listView1) ;
25
26 // 1.准備數據
27 list = new ArrayList<ShopInfo>() ;
28 for(int i=0;i<100;i++){
29 ShopInfo s = new ShopInfo(R.drawable.ic_launcher,"名稱:Android"+(i+1)+"號","價格:"+(i*12)+"$") ;
30 list.add(s) ;
31 }
32
33 // 2.准備BaseAdapter對象
34 MyBaseAdapter baseAdapter = new MyBaseAdapter() ;
35
36 // 3.添加listView裡面
37 listView.setAdapter(baseAdapter) ;
38 }
39
40 class MyBaseAdapter extends BaseAdapter{
41 // 返回集合數據的數量
42 @Override
43 public int getCount() {
44 return list.size();
45 }
46 //返回指定下標對應的數據對象
47 @Override
48 public Object getItem(int position) {
49 return list.get(position);
50 }
51
52 @Override
53 public long getItemId(int position) {
54 // TODO Auto-generated method stub
55 return 0;
56 }
57 /**
58 *
59 * 返回指定下標對應的item的view對象
60 * position:下標
61 * convertview:可重復利用的控件
62 * parent:ListView對象
63 * */
64 @Override
65 public View getView(int position, View convertView, ViewGroup parent) {
66 //加載item的布局,得到View對象
67 if(convertView == null){ //如果直接創建,很有可能照成應用崩毀
68 convertView = View.inflate(MainActivity.this, R.layout.siple_adapter, null) ;
69 }
70 //根據position設置對應的數據
71 //得到當前行的數據對象
72 ShopInfo s = list.get(position) ;
73 //得到子view對象
74 ImageView imageView = (ImageView) convertView.findViewById(R.id.siple_iv) ;
75 TextView tv1 = (TextView) convertView.findViewById(R.id.siple_tv1) ;
76 TextView tv2 = (TextView) convertView.findViewById(R.id.siple_tv2) ;
77 // 設置資源
78 imageView.setImageResource(s.getImage()) ;
79 tv1.setText(s.getSname()) ;
80 tv2.setText(s.getPrice()) ;
81
82 return convertView;
83 }
84
85 }
86 }
實現效果

總結: SimpleAdapter 和 BaseAdapter 很類似
SimpleAdapter是把數據存放在Map中,根據from 和to 對應的
BaseAdapter是把數據存放到自己定義的Pojo中 在根據繼承BaseAdapter 實現裡面的抽象方法
WebView線性進度條,webview線性
WebView線性進度條,webview線性參考:http://www.cnblogs.com/hubli/p/4835549.html APP會跳轉網頁時候,請參考:h
Android(Linux)實時監測串口數據,android實時監測
Android(Linux)實時監測串口數據,android實時監測 之前在做WinCE車載方案時,曾做過一個小工具Trac
完整項目:木子記事本(原創,轉載請注明出處)。,轉載出處
完整項目:木子記事本(原創,轉載請注明出處)。,轉載出處 一個較為完整的記事本App,記錄,存儲到數據庫,編輯,保存。 運行效果圖: Activity類:
Android應用開發教程之十六:WebView的簡單使用
最近的項目中看產品文檔的時候,發現設計文檔中”資訊”欄目設計的圖文並茂,有聲有色,感歎之余,發覺如此的布局寫起來太煩太累了&
Android 主頁面頂部欄的通知Notification ,可以自定義通知消息欄的風格,並且點擊通知欄進人本程序。,android自定義消息欄
Android 主頁面頂部欄的通知Notification ,可以自定義