android專案中提取公共adapter的寫法
阿新 • • 發佈:2019-02-06
在android專案中,有時候我們需要寫很多個介面卡,這時候,adapter就會有很多個,會造成程式碼重複。這時候,我們就可以考慮提取一個公共的CommonAdapter出來。
我們將公用的一些方法放在這個adpater中,將這個adapter定義為抽象類,把公用的方法放在這個抽象類中實現,然後讓子類自己去重寫getView方法。
如下是這個公用的CommonAdapter,它繼承BaseAdapter,重寫了getCount,getItemgetItemId這三個抽象方法,這樣的話getCount,getItem,getItemId這三個方法就相當於
下面是例子
公共提成的抽象類CommonAdapter
public abstract class CommonAdapter<T> extends BaseAdapter { protected Context mContext;//定義成protected,用來給子類訪問 protected List<T> mList = new ArrayList<T>(); publicCommonAdapter(Context context, List<T> list) { this.mContext = context; this.mList = list; } protected View.OnClickListener onClickListener;//定義成protected,讓子類重寫 public void setOnClickListener(View.OnClickListener onClickListener) { this.onClickListener = onClickListener; } @Overridepublic int getCount() { return mList.size(); } @Override public T getItem(int position) { if (position < mList.size()) { return mList.get(position); } return null; } @Override public long getItemId(int position) { return position; } /** * 新增資料, * * @param aList */ public void addData(List<T> aList) { if (aList != null && aList.size() > 0) { mList.addAll(aList); } notifyDataSetChanged(); } /** * 獲取資料 * * @return */ public List<T> getData() { return mList; } /** * 設定資料, * * @param sList */ public void setData(List<T> sList) { mList.clear(); addData(sList); } }
我們一般用到的adapter
public class MainAdapter extends CommonAdapter { public MainAdapter(Context context, List list) { super(context, list); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null); viewHolder.tvName = (TextView) convertView .findViewById(R.id.tv_main); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } if (position < mList.size()) { viewHolder.tvName.setText(mList.get(position) + ""); } return convertView; } class ViewHolder { TextView tvName; } }
Activity
public class MainActivity extends Activity { private ArrayList<Integer> list = new ArrayList<Integer>(); private MainAdapter mMainAdapter; private ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initList(); } private void initView() { mListView = (ListView) findViewById(R.id.ls_main); } public void initList() { for (int i = 0; i < 8; i++) { list.add(i); } mMainAdapter = new MainAdapter(this, list); mListView.setAdapter(mMainAdapter); } }
activity_main.xml
<ListView android:id="@+id/ls_main" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" />item_list.xml
<?xml version="1.0" encoding="utf-8"?> <TextView android:id="@+id/tv_main" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"/>