在ListView中使用BaseAdapter进行适配
首先我不否認,我們可以不使用Adapter甚至是BaseAdapter來進行適配就能達到某種效果。
但是,我們的LisView的Item多了之后,可能就會導致有很多冗余。而且,你有沒有想過一個問題,如果我們要對某一項進行某種操作,比如說是點擊操作。這樣一來,勢必會很麻煩。所以,我們可以嘗試另一種比較好的方式,那就是使用Adapter來適配。在所有的Adapter中,個人還是比較中意BaseAdapter,它不像ListAdapter這些Adapter這么局限。好了,下面我們就來說說這個BaseAdapter吧。
它有一個getCount()的抽象方法,這個方法是說明當前的BaseAdapter需要加載多少項數據。
@Overridepublic int getCount() {if (mModels != null) {return mModels.size();}return 0;} 上面的代碼中,mModels的定義如下:
private ArrayList<EyeWebSiteModel> mModels; 所以,上面我們重寫的getCount()方法就是mModels的大小,因為我們要適配每一個EyeWebsiteModel。
getItem(int position)和getItemId(int position)就沒什么好說的了,重點是getView(int position, View view, ViewGroup parent)這個方法。
顧名思義,getView就是獲得一個View,它要是一個View,這個View會從方法的第二個參數傳入,然后我們在方法里面,對這個View進行我們需要的操作,例如,重命名什么的。因為View都拿到了,愛怎么操作還是按自己想著的來?
我現在在這里介紹在Adapter中一種比較常見的方法,那就是在我們View還沒有加載的時候才加載,如果已經加載過了,那就去獲得這個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);}} 這里,這個ViewHolder類就起到了一個緩沖的作用。我們在getView()方法中其實就是對這個ViewHolder類進行操作。如下:
@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中適配的過程也很簡單:
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);
具體的實現過程(EyeSelectDataListFragment.java和EyeSelectDataListFragmentAdapter.java),可以參考:點擊打開鏈接
總結
以上是生活随笔為你收集整理的在ListView中使用BaseAdapter进行适配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android退出程序(一)——单例模式
- 下一篇: Android中使用Handler和异步