1. 程式人生 > >android通用介面卡的封裝

android通用介面卡的封裝

Android開發的小夥伴們,肯定會知道一個專案下來寫幾十個介面卡都是普普通通的事情,但是這幾十個介面卡有很多還是相同的程式碼所以這就有點蛋疼了,將許多的時間都浪費在了寫同樣程式碼的事情上,這無疑不僅是對時間的一個浪費還會導致專案程式碼的冗餘,從而增加維護成本。。鑑於此,通用介面卡這一名詞就出現在了人們的視線中,我也是近期才去考慮做這些事情找了一些資料再加上一些自己的想法寫了一個通用的介面卡,僅供大家參考,網上有好多寫好的萬能介面卡但是我發現網上的那些都沒有對按鈕的監聽進行處理,我這裡加上了對按鈕監聽的處理,如果大家有什麼更好的實現方式歡迎留言指導。。。下面直接上程式碼

**
 * Created by Administrator on 2017/7/10.
*/ public abstract class CommonAdapter<T> extends BaseAdapter { protected LayoutInflater mInflater; protected static Context mContext; protected List<T> mDatas; protected final int mItemLayoutId; public CommonAdapter(Context context, List<T> mDatas,int itemLayoutId) { mInflater
= LayoutInflater.from(context); this.mContext = context; this.mDatas = mDatas; this.mItemLayoutId = itemLayoutId; } @Override public int getCount() { return mDatas.size(); } @Override public Object getItem(int position) { return mDatas.get(position);
} @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder = getViewHolder(position, convertView, parent); convert(viewHolder, (T) getItem(position)); return viewHolder.getConvertView(); } public abstract void convert(ViewHolder helper, T item); private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) { return ViewHolder.get(mContext, convertView, parent, mItemLayoutId, position); } public static class ViewHolder { private final SparseArray<View> mViews; private int mPosition; private View mConvertView; private OnClickListener mOnItemChangedListener; private ViewHolder(Context context, ViewGroup parent, int layoutId, int position) { this.mPosition = position; this.mViews = new SparseArray<View>(); mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false); // setTag mConvertView.setTag(this); } /** * 拿到一個ViewHolder物件 * * @param context * @param convertView * @param parent * @param layoutId * @param position * @return */ public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) { if (convertView == null) { return new ViewHolder(context, parent, layoutId, position); } return (ViewHolder) convertView.getTag(); } public View getConvertView() { return mConvertView; } /** * 通過控制元件的Id獲取對於的控制元件,如果沒有則加入views * * @param viewId * @return */ public <T extends View> T getView(int viewId) { View view = mViews.get(viewId); if (view == null) { view = mConvertView.findViewById(viewId); mViews.put(viewId, view); } return (T) view; } /** * 為TextView設定字串 * * @param viewId * @param text * @return */ public ViewHolder setText(int viewId, String text) { TextView view = getView(viewId); view.setText(text); return this; } /** * 為ImageView設定圖片 * * @param viewId * @param drawableId * @return */ public ViewHolder setImageResource(int viewId, int drawableId) { ImageView view = getView(viewId); view.setImageResource(drawableId); return this; } /** * 為ImageView設定圖片 * * @param viewId * @return * @paramdrawableId */ public ViewHolder setImageBitmap(int viewId, Bitmap bm) { ImageView view = getView(viewId); view.setImageBitmap(bm); return this; } /** * 為ImageView設定圖片 * * @param viewId * @return * @paramdrawableId */ public ViewHolder setImageByUrl(int viewId, String url) { // ImageLoader.getInstance(3, Type.LIFO).loadImage(url, // (ImageView) getView(viewId)); Glide.with(mContext).load(url).into((ImageView) getView(viewId)); return this; } /** * 為按鈕設定監聽 * @return */ public ViewHolder setOnClickBtn(Button viewId){ viewId.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); return this; } /** * 設定監聽 這是對圖片監聽的設定(換成按鈕是一樣的邏輯程式碼) * @return */ public ViewHolder setOnClickImg(int viewId, View.OnClickListener onClickListener){ ImageView view = getView(viewId); view.setOnClickListener(onClickListener); return this; } // 自定義介面 public interface OnClickListener { void onClick(View view); } // 對外提供方法 public void setOnClickListener( OnClickListener listener) { this.mOnItemChangedListener = listener; } public int getPosition() { return mPosition; } } }

至此,我們的介面卡就封裝完了,相信大家都能看懂這裡不做過多解釋。。

下面看具體的使用:

在Activity中:

emp_listview.setAdapter(adapter = new CommonAdapter<String>(EmpAddressActivity.this, list, R.layout.emplist_item) {
    @Override
public void convert(ViewHolder helper, String item) {
        helper.setText(R.id.emp_name, item);
helper.setOnClickImg(R.id.emp_message, new View.OnClickListener() {
            @Override
public void onClick(View v) {
                Util.MyToast(EmpAddressActivity.this, "點擊發送訊息");
Uri uri2 = Uri.parse("smsto:"+10086);
Intent intentMessage = new Intent(Intent.ACTION_VIEW,uri2);
startActivity(intentMessage);
}
        });
}
});

我這裡實現的是點選圖片按鈕進行傳送簡訊的操作,不管什麼邏輯這個通用介面卡的使用都是一樣的。。。

android渣渣一直在努力希望大家能夠給出寶貴的意見建議。。。