乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       月冷星河 2016-05-03

      一、前言

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


      二、實現(xiàn)

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


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

      上代碼解釋:

      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接口,關于這點好處,后面還會介紹

      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布局對應的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; }}

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

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




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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多