編輯:關於Android編程
在開發的過程中,常常會用到ViewPager、ListView、GridView等、這些帶有Item的視圖控件,而這些控件有個共同點就是都要用到它們的適配器,我們在實現視圖展示時,一般都會去寫個自定義的適配器去繼承PagerAdapter或Adapter或Adapter的子類,因為Android源碼自帶的這些適配器都比較抽象,往往在我們開發時,寫的一些自定義適配器都需要重寫Adapter父類的一些方法,在重寫時,有很多較通用性的代碼,比較耦合,下面將PagerAdapter和Adapter的子類BaseAdapter進行了封裝與抽象,免去了每次都去重寫這些通用的代碼,代碼如下:
1.ViewPagerAdapter
/** * 通用ViewPagerAdapter * @author Jenly * */ public class ViewPagerAdapter extends PagerAdapter { private List因為ViewPager的Item基本上都是繼承View,所以這個ViewPagerAdapter 基本上可作為ViewPager控件的通用適配器。listViews = null; public ViewPagerAdapter(List listViews) { this.listViews = listViews; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager)container).removeView(listViews.get(position)); } @Override public int getCount() { return listViews.size(); } @Override public Object instantiateItem(View container, int position) { ((ViewPager)container).addView(listViews.get(position),0); return listViews.get(position); } @Override public boolean isViewFromObject(View paramView, Object paramObject) { return paramView == paramObject; } public List getListViews() { return listViews; } public void setListViews(List listViews) { this.listViews = listViews; } }
2.AbstractAdapter
/** * 抽象適配器(免去一些有共性的代碼) * @author Jenly * * @param*/ public abstract class AbstractAdapter extends BaseAdapter { protected Context context; protected List listData; protected LayoutInflater layoutInflater; public AbstractAdapter(Context context,List listData){ this.context = context; this.listData = listData; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { if(listData!=null){ return listData.size(); } return 0; } @Override public Object getItem(int position) { if(listData!=null){ return listData.get(position); } return null; } @Override public long getItemId(int position) { return position; } public List getListData() { return listData; } public void setListData(List listData) { this.listData = listData; } }
3.HolderAdapter
/** * 通用適配器(適合一些常規的適配器) * @author Jenly * * @param*/ public abstract class HolderAdapter extends AbstractAdapter { public HolderAdapter(Context context, List listData) { super(context, listData); } @Override public View getView(int position, View convertView, ViewGroup parent) { Object holder = null; if(convertView==null){ convertView = buildConvertView(layoutInflater); holder = buildHolder(convertView); convertView.setTag(holder); }else{ holder = convertView.getTag(); } bindViewData(holder,listData.get(position),position); return convertView; } /** * 建立convertView * @param layoutInflater * @return */ public abstract View buildConvertView(LayoutInflater layoutInflater); /** * 建立視圖Holder * @param convertView * @return */ public abstract Object buildHolder(View convertView); /** * 綁定數據 * @param holder * @param t * @param position */ public abstract void bindViewDatas(Object holder,T t,int position); }
下面是個自定義的測試適配器,繼承HolderAdapter實現它的三個抽象方法:
public class TestHolderAdapter extends HolderAdapter{ public TestHolderAdapter(Context context, List listData) { super(context, listData); } @Override public View buildConvertView(LayoutInflater layoutInflater) { return layoutInflater.inflate(R.layout.activity_list_item, null); } @Override public Object buildHolder(View convertView) { ViewHolder holder = new ViewHolder(); holder.tv = (TextView)convertView.findViewById(R.id.tv); return holder; } @Override public void bindViewDatas(Object holder, String t, int position) { ((ViewHolder)holder).tv.setText(t); } private static class ViewHolder{ TextView tv; } }
在系統之中,通過對話框可以對用戶的某些操作進行提示,但是在Android平台之中也提供了另外一套更加友好的提示界面效果,而且這種界面在提示用戶的時候不會打斷用戶的正常操作
Android 通過Socket 和服務器通訊,是一種比較常用的通訊方式,時間比較緊,說下大致的思路,希望能幫到使用socket 進行通信的人(1)開啟一個線程發送消息&
網盤存儲個人開發者往往沒有自己的後台服務器,但同時又想獲取app的運行信息,這就要借助於第三方的網絡存儲(也叫網盤、雲盤、微盤等等)。通過讓app自動在網盤上存取文件,可
版本:1.0日期:2014.7.24版權:© 2014 kince 轉載注明出處 在有的應用中可能需要設置一些標簽來方便用去去查詢某些信息,比如手機助手或