小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

分開adapter的getView方法代碼,寫出個清爽的adapter

 月冷星河 2016-05-03

一、前言

習慣很多時候決定了我們的做法,而做法一定程度上又在鞏固我們的習慣。細想,這是一件很恐怖的事。所以很多時候要學(xué)會用一些新的方式去改變我們的習慣。做技術(shù),亦如此。很多時候,我們寫一個listview的adapter,總是會按照我們自己習慣的方式去寫,布局簡單的還好,布局一復(fù)雜起來,你就會看到你的類里面代碼幾百甚至上千行,這樣維護起來是很可怕的。而我個人的編程風格是寧愿類多而不愿一個類里面的代碼多。所以很多東西都喜歡抽離出去,盡量讓代碼之間具有的耦合性降到最低。今天這里要介紹的一種方式是將adapter里面的getview代碼分離出一個類去,不要放在getview里面。讓你的adapter變得更加清爽,維護起來更加清晰有效,這種方法開始是看到一個github上面的國外大神寫的,經(jīng)過理解,自己也寫了一下,放在這里大家學(xué)習下。


二、實現(xiàn)

首先講一下思想,看一下getView這個方法先,這里其實是通過inflate返回了一個view,對了,這里的view是在我們寫的一個XML的文件解析出來的。所以我們能不能這樣做,自定義一個view,而這個自定義的view就是我們那個listview的一個item的布局,然后這個view就單獨作為一個類存在著,只要getView用到了,我們就new出這個自定義的view,讓它return。確實,完全可以這樣做的。而關(guān)于這種方式的好處,后面還會介紹到。


現(xiàn)在思想有了,具體怎樣實現(xiàn)比較合理,就可以小思考下咯。盡量設(shè)計得通用,方便最好。

上代碼解釋:

1、首先定義一個接口,用來綁定控件,這里用泛型是為了通用性。

package com.kroc.adapter;/** * 綁定控件接口 * @author 林楷鵬 * @date 2014-12-9 下午9:45:25 */public interface IAdapterView { public void bind(int position, T item);}


2、listview的一個item布局,簡簡單單


3、根據(jù)上面布局定義一個view,這個view就是我們一個listview的item布局,這里實現(xiàn)IAdapterView接口,關(guān)于這點好處,后面還會介紹

package com.kroc.adapter;import android.content.Context;import android.content.Intent;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;import com.kroc.adapterdemo.R;import com.kroc.main.FoodBO;import com.kroc.main.TestActivity;/** * item布局對應(yīng)的view * @author 林楷鵬 * @date 2014-12-9 下午9:49:01 */public class FoodListItemView extends LinearLayout implements IAdapterView{ private Context mContext; private TextView nameTxtv; private TextView numTxtv; private Button getBtn; private FoodBO mFoodBO; public FoodListItemView(Context context) { super(context); this.mContext = context; init(); } private void init(){ View.inflate(getContext(), R.layout.lv_item_food, this); nameTxtv = (TextView)findViewById(R.id.item_food_name_txtv); numTxtv = (TextView)findViewById(R.id.item_food_num_txtv); getBtn = (Button)findViewById(R.id.item_food_get_btn); getBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(mContext, TestActivity.class); intent.putExtra('food', mFoodBO); mContext.startActivity(intent); } }); } @Override public void bind(int position, FoodBO foodBO) { mFoodBO = foodBO; nameTxtv.setText(foodBO.getFoodName()); numTxtv.setText(foodBO.getFoodNum() + '份'); }}


4、然后這里就是適配器,注意一下,這里是為了顯示這種做法的簡潔性,我特意寫了兩個布局,就是說一個listview的item可以有不同的布局,往往用傳統(tǒng)方式寫的話,代碼會更多,但是在這里可以看到,我的getView里面就是短短幾行代碼,如此簡潔。(其他代碼點擊下面下載代碼去看)。這里可以回想一下,我們平時做這種有多種布局的item是如何做的,是不是把所有的view加載綁定都寫到getView里面了,那樣是不是讓你的代碼變得格外臃腫不堪呢?而通過這種方式,你就可以將不同的布局寫到不同的類中去,需要用到的時候再new出來就行。

package com.kroc.adapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import com.kroc.main.FoodBO;/** * @author 林楷鵬 * @description 食物列表適配 * @create 2014-11-24下午2:37:25 * */public class MyAdapter extends CommonBaseAdapter { private static final int ITEM_VIEW_TYPE_NUM = 2; private static final int ITEM_VIEW_TYPE_FOOD = 0; private static final int ITEM_VIEW_TYPE_IMAGE = 1; public MyAdapter(Context context) { super(context); } @Override public int getViewTypeCount() { return ITEM_VIEW_TYPE_NUM; } @Override public int getItemViewType(int position) { if(position % 3 == 0){//為了顯示不同item布局 return ITEM_VIEW_TYPE_FOOD; }else{ return ITEM_VIEW_TYPE_IMAGE; } } @Override public View getView(int position, View convertView, ViewGroup parent) { IAdapterView orderDetail = null; if(position % 3 == 0){ orderDetail = new FoodListItemView(mContext); }else{ orderDetail = new ImageListItemView(mContext); } orderDetail.bind(position, mList.get(position)); return (View) orderDetail; }}

關(guān)于定義接口的好處:泛型是一個好處,可以適配不同的數(shù)據(jù)類型,另外,可以將要顯示的item布局都實現(xiàn)接口,這樣的話就可以實現(xiàn)多態(tài)了。下面看看效果圖,從下面的圖片可以看到確實也實現(xiàn)了我們要的效果。

另外這樣做還有一個好處,就是代碼的復(fù)用性,假如你有兩個地方都用到同一個布局,那么通過這種方式,你就可以在兩個地方new兩個view就行,不用在兩個地方將代碼碼兩遍,那樣很煩的。




其他代碼不做多解釋,還是老規(guī)矩。要了解的點擊代碼下載

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多