在ListView中使用BaseAdapter进行适配
首先我不否认,我们可以不使用Adapter甚至是BaseAdapter来进行适配就能达到某种效果。
但是,我们的LisView的Item多了之后,可能就会导致有很多冗余。而且,你有没有想过一个问题,如果我们要对某一项进行某种操作,比如说是点击操作。这样一来,势必会很麻烦。所以,我们可以尝试另一种比较好的方式,那就是使用Adapter来适配。在所有的Adapter中,个人还是比较中意BaseAdapter,它不像ListAdapter这些Adapter这么局限。好了,下面我们就来说说这个BaseAdapter吧。
它有一个getCount()的抽象方法,这个方法是说明当前的BaseAdapter需要加载多少项数据。
@Override public 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类进行操作。如下:
@Override public 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),可以参考:点击打开链接