1. 程式人生 > >ListView控制元件

ListView控制元件

BaseAdapter:是所有介面卡類的父類,可以對列表項進行最大限度的定製 1.1 自定義介面卡中的方法 getCount getView getItem getItemId 1.2 LayoutInflater(佈局解析器) –LayoutInflater有三種獲得方式,資料中有詳細介紹 用來把layout佈局檔案解析成一個View物件,不可以new,需要使用系統服務獲得

inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 案例一:ListView的使用及優化

ListView優化 2.1 使用ConvertView重用元件 即拖動時被遮住、看不見的控制元件,重用它,而非每次建立一個新的物件

2.2 使用內部類ViewHolder+ConvertView.setTag()儲存控制元件,而不用每次查詢 ViewHolder(檢視的持有者)

2.3 使用分頁查詢(PullToRefresh) 2.3.2 使用AsyncTask(非同步任務)載入資料,最少要重寫以下這兩個方法 doInBackground 後臺執行 onPostExecute 在doInBackground方法執行結束之後在執行,並且執行在UI執行緒當中 可以對UI空間進行設定 關鍵程式碼: myListViewAdapter.notifyDataSetChanged();// 通知介面卡資料已改變 ptrlv_main_1.onRefreshComplete();// 通知控制元件資料已經載入完畢

2.4 事件監聽的優化 假設Item中有三個按鈕,要為三個按鈕定義事件,如果是下面這樣 btn1.setOnclickListener(new View.onClickListener(){ public void onClick(View view){ //… } }); btn2.setOnclickListener(new View.onClickListener(){ public void onClick(View view){ //… } }); btn3.setOnclickListener(new View.onClickListener(){ public void onClick(View view){ //… } }); 如果每屏顯示10個Item,那一共建立了30個listener物件在記憶體中。 如果,你是在Adapter建立時,只建立一個Listener,並將其定義成全域性屬性, 然後通過按鈕的ID來進行判斷是哪個事件應該觸發, class MyAdapter extends BaseAdapter{ View.onClickListener myListener = new View.onClickListener(){ public void onClick(View view){ if(view.getId() == R.id.btn1){ //… }else if(view.getId() == R.id.btn2){ //… }else if(view.getId() == R.id.btn3){ //… } } }); }

    //註冊監聽器     btn1.setOnclickListener(myListener);     btn2.setOnclickListener(myListener);     btn3.setOnclickListener(myListener);

自定義介面卡:

package com.example.a6;

import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity { private ListView lv_main_show; private List<Book> data=new BookDao().list(); private MyBaseAdapter adapter;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         lv_main_show=findViewById(R.id.lv_main_show);         adapter=new MyBaseAdapter((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE));         lv_main_show.setAdapter(adapter);     }     class MyBaseAdapter extends BaseAdapter{     class ViewHolder{         ImageView iv_listviewitem_image ;         TextView tv_listviewitme_title;         TextView tv_listviewitme_author;         TextView tv_listviewitme_price;         TextView tv_listviewitme_publish;         TextView tv_listviewitme_remark;

    }         private LayoutInflater inflater ;

        public MyBaseAdapter(LayoutInflater inflater) {             this.inflater = inflater;         }

        @Override         public int getCount() {

            return data.size();         }

        @Override         public Object getItem(int i) {             return data .get(i);         }

        @Override         public long getItemId(int i) {             return i;         }

        @Override         public View getView(int i, View convertView, ViewGroup parent) {             View v=convertView;             if (v==null){                 v= inflater.inflate(R.layout.listview_item, null);                 ViewHolder viewHolder=new ViewHolder();                 viewHolder.iv_listviewitem_image=v.findViewById(R.id.iv_listviewitem_image);                 viewHolder.tv_listviewitme_title=v.findViewById(R.id.tv_listviewitme_title);                 viewHolder.tv_listviewitme_author=v.findViewById(R.id.tv_listviewitme_author);                 viewHolder.tv_listviewitme_price=v.findViewById(R.id.tv_listviewitme_price);                 viewHolder.tv_listviewitme_publish=v.findViewById(R.id.tv_listviewitme_publish);                 viewHolder.tv_listviewitme_remark=v.findViewById(R.id.tv_listviewitme_remark);                 v.setTag(viewHolder);             }             ViewHolder tag = (ViewHolder) v.getTag();             Book book = data.get(i);             tag.iv_listviewitem_image.setImageResource(book.getImage());             tag.tv_listviewitme_title.setText(book.getTitle());             tag.tv_listviewitme_author.setText(book.getAuthor());             tag.tv_listviewitme_price.setText(book.getPrice().toString());             tag.tv_listviewitme_publish.setText(book.getPublish());             tag.tv_listviewitme_remark.setText(book.getRemark());             return v;         }     } }