Android -- ListView(SimpleAdapter) 自訂配接器

來源:互聯網
上載者:User

標籤:

2.  代碼

MainActivity

  

package com.himi;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;public class MainActivity extends Activity {private SimpleAdapter adapter;// 聲明配接器物件private ListView listView; // 聲明列表視圖對象private List < Map < String , Object >> list;// 聲明列表容器public static MainActivity ma;@ Overridepublic void onCreate ( Bundle savedInstanceState ) {super.onCreate ( savedInstanceState );ma = this;// 執行個體化列表容器list = new ArrayList < Map < String , Object >> ( );listView = new ListView ( this );// 執行個體化列表視圖// 執行個體一個列表資料容器Map < String , Object > map = new HashMap < String , Object > ( );// 往列表容器中添加資料map.put ( "item1_imageivew" , R.drawable.icon );map.put ( "item1_bigtv" , "BIGTV" );map.put ( "item1_smalltv" , "SMALLTV" );// 將列表資料添加到列表容器中list.add ( map );// 使用Android 提供的SimpleAdapter適配器,無法實現組件監聽;// adapter = new SimpleAdapter(this, list, R.layout.main,// new String[] {"item1_imageivew", "item1_bigtv", "item1_smalltv" },// new int[] {R.id.iv, R.id.bigtv, R.id.smalltv });// --使用自訂配接器,可監聽其ListView中每一項的事件監聽MySimpleAdapter adapter = new MySimpleAdapter (                              this ,                              list ,                              R.layout.main ,                              new String [ ]                              {                                                            "item1_imageivew" ,                                                            "item1_bigtv" ,                                                            "item1_smalltv"                              } ,                              new int [ ]                              {                                                            R.id.iv ,                                                            R.id.bigtv ,                                                            R.id.smalltv                              } );// 為列表視圖設定適配器(將資料對應到列表視圖中)listView.setAdapter ( adapter );listView.setOnItemClickListener ( new OnItemClickListener ( ) {@ Overridepublic void onItemClick ( AdapterView < ? > parent ,                              View view ,                              int position ,                              long id ) {// TODO Auto-generated method stubToast.makeText ( MainActivity.this ,                              "你點擊的是第:"                                                            + position                                                            + "項" ,                              Toast.LENGTH_SHORT )                              .show ( );}} );// //顯示列表視圖this.setContentView ( listView );}}

 MySimpleAdapter

package com.himi;import java.util.List;import java.util.Map;import android.app.AlertDialog;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.ImageView;import android.widget.TextView;import android.widget.CompoundButton.OnCheckedChangeListener;public class MySimpleAdapter extends BaseAdapter {//聲明一個LayoutInflater對象(其作用是用來執行個體化布局)private LayoutInflater mInflater;private List < Map < String , Object >> list;//聲明List容器物件private int layoutID; //聲明布局IDprivate String flag[];//聲明ListView項中所有組件映射索引private int ItemIDs[];//聲明ListView項中所有組件ID數組public MySimpleAdapter (               Context context ,               List < Map < String , Object >> list ,               int layoutID , String flag[] , int ItemIDs[] ) {//利用構造來執行個體化成員變數對象this.mInflater = LayoutInflater.from ( context );this.list = list;this.layoutID = layoutID;this.flag = flag;this.ItemIDs = ItemIDs;}@ Overridepublic int getCount ( ) {return list.size ( );//返回ListView項的長度}@ Overridepublic Object getItem ( int arg0 ) {return 0;}@ Overridepublic long getItemId ( int arg0 ) {return 0;}//執行個體化布局與組件以及設定組件資料//getView(int position, View convertView, ViewGroup parent)//第一個參數:繪製的行數//第二個參數:繪製的視圖這裡指的是ListView中每一項的布局//第三個參數:view的合集,這裡不需要@ Overridepublic View getView ( int position , View convertView ,                              ViewGroup parent ) {//將布局通過mInflater對象執行個體化為一個viewconvertView = mInflater.inflate ( layoutID , null );for ( int i = 0 ; i < flag.length ; i ++ ) {//遍曆每一項的所有組件//每個組件都做匹配判斷,得到組件的正確類型if (convertView.findViewById ( ItemIDs [ i ] ) instanceof ImageView) {//findViewById()函數作用是執行個體化布局中的組件//當組件為ImageView類型,則為其執行個體化一個ImageView對象ImageView iv = ( ImageView ) convertView                              .findViewById ( ItemIDs [ i ] );//為其組件設定資料iv.setBackgroundResource ( ( Integer ) list                              .get ( position )                              .get ( flag [ i ] ) );}else if (convertView.findViewById ( ItemIDs [ i ] ) instanceof TextView) {//當組件為TextView類型,則為其執行個體化一個TextView對象TextView tv = ( TextView ) convertView                              .findViewById ( ItemIDs [ i ] );//為其組件設定資料tv.setText ( ( String ) list.get (                              position )                              .get ( flag [ i ] ) );}}//為按鈕設定監聽( ( Button ) convertView.findViewById ( R.id.btn ) )                              .setOnClickListener ( new View.OnClickListener ( ) {                              @ Override                              public void onClick ( View v ) {                              //這裡彈出一個對話方塊,後文有詳細講述                              new AlertDialog.Builder (                                                            MainActivity.ma )                                                            .setTitle ( "自訂SimpleAdapter" )                                                            .setMessage ( "按鈕成功觸發監聽事件!" )                                                            .show ( );                              }                              } );//為複選框設定監聽( ( CheckBox ) convertView.findViewById ( R.id.cb ) )                              .setOnCheckedChangeListener ( new OnCheckedChangeListener ( ) {                              @ Override                              public void onCheckedChanged (                                                            CompoundButton buttonView ,                                                            boolean isChecked ) {                              //這裡彈出一個對話方塊,後文有詳細講述                              new AlertDialog.Builder (                                                            MainActivity.ma )                                                            .setTitle ( "自訂SimpleAdapter" )                                                            .setMessage ( "CheckBox成功觸發狀態改變監聽事件!" )                                                            .show ( );                              }                              } );return convertView;}}

 Layout

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="horizontal" >    <ImageView        android:id="@+id/iv"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="vertical" >        <TextView            android:id="@+id/bigtv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textSize="20sp" />        <TextView            android:id="@+id/smalltv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textSize="10sp" />    </LinearLayout>    <Button        android:id="@+id/btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:focusable="false"        android:text="button" />    <CheckBox        android:id="@+id/cb"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:focusable="false" /></LinearLayout>

 

Android -- ListView(SimpleAdapter) 自訂配接器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.