在ListView中使用BaseAdapter进行适配
首先我不否認(rèn),我們可以不使用Adapter甚至是BaseAdapter來(lái)進(jìn)行適配就能達(dá)到某種效果。
但是,我們的LisView的Item多了之后,可能就會(huì)導(dǎo)致有很多冗余。而且,你有沒(méi)有想過(guò)一個(gè)問(wèn)題,如果我們要對(duì)某一項(xiàng)進(jìn)行某種操作,比如說(shuō)是點(diǎn)擊操作。這樣一來(lái),勢(shì)必會(huì)很麻煩。所以,我們可以嘗試另一種比較好的方式,那就是使用Adapter來(lái)適配。在所有的Adapter中,個(gè)人還是比較中意BaseAdapter,它不像ListAdapter這些Adapter這么局限。好了,下面我們就來(lái)說(shuō)說(shuō)這個(gè)BaseAdapter吧。
它有一個(gè)getCount()的抽象方法,這個(gè)方法是說(shuō)明當(dāng)前的BaseAdapter需要加載多少項(xiàng)數(shù)據(jù)。
@Overridepublic int getCount() {if (mModels != null) {return mModels.size();}return 0;} 上面的代碼中,mModels的定義如下:
private ArrayList<EyeWebSiteModel> mModels; 所以,上面我們重寫的getCount()方法就是mModels的大小,因?yàn)槲覀円m配每一個(gè)EyeWebsiteModel。
getItem(int position)和getItemId(int position)就沒(méi)什么好說(shuō)的了,重點(diǎn)是getView(int position, View view, ViewGroup parent)這個(gè)方法。
顧名思義,getView就是獲得一個(gè)View,它要是一個(gè)View,這個(gè)View會(huì)從方法的第二個(gè)參數(shù)傳入,然后我們?cè)诜椒ɡ锩?#xff0c;對(duì)這個(gè)View進(jìn)行我們需要的操作,例如,重命名什么的。因?yàn)閂iew都拿到了,愛(ài)怎么操作還是按自己想著的來(lái)?
我現(xiàn)在在這里介紹在Adapter中一種比較常見(jiàn)的方法,那就是在我們View還沒(méi)有加載的時(shí)候才加載,如果已經(jīng)加載過(guò)了,那就去獲得這個(gè)View。
大家可以看看下面這幾行代碼:
private class ViewHolder {public TextView mSerialTextView = null;public TextView mWebSiteTextView = null;public ViewHolder(View v) {mSerialTextView = (TextView) v.findViewById(R.id.fragment_eye_data_select_list_item_serial_textview);mWebSiteTextView = (TextView) v.findViewById(R.id.fragment_eye_data_select_list_item_website_textview);}} 這里,這個(gè)ViewHolder類就起到了一個(gè)緩沖的作用。我們?cè)趃etView()方法中其實(shí)就是對(duì)這個(gè)ViewHolder類進(jìn)行操作。如下:
@Overridepublic View getView(int position, View view, ViewGroup parent) {ViewHolder viewHolder = null;if (view == null || view.getTag() == null) {view = mLayoutInflater.inflate(R.layout.fragment_eye_data_select_list_item_layout, null);viewHolder = new ViewHolder(view);view.setTag(viewHolder);} else {viewHolder = (ViewHolder) view.getTag();}EyeWebSiteModel model = mModels.get(position);viewHolder.mSerialTextView.setText("" + (position + 1));viewHolder.mWebSiteTextView.setText(model.getmWebsite());return view;} 而在Fragment或是Activity中適配的過(guò)程也很簡(jiǎn)單:
ListView selectListView = (ListView) v.findViewById(R.id.fragment_eye_data_select_listview);final ArrayList<EyeWebSiteModel> models = EyeSelectDataListFragmentMBLL.getMergeWebSiteModelsAll(getActivity());if (models == null) {return v;}EyeSelectDataListFragmentAdapter adapter = new EyeSelectDataListFragmentAdapter(getActivity(), models);selectListView.setAdapter(adapter);
具體的實(shí)現(xiàn)過(guò)程(EyeSelectDataListFragment.java和EyeSelectDataListFragmentAdapter.java),可以參考:點(diǎn)擊打開(kāi)鏈接
總結(jié)
以上是生活随笔為你收集整理的在ListView中使用BaseAdapter进行适配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android退出程序(一)——单例模式
- 下一篇: Toast的另类应用及另类“拦截”Hom