• 在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),可以参考:点击打开链接


  • 相关阅读:
    ZOJ 3631 Watashi's BG(dp+dfs)
    hdu 1506 Largest Rectangle in a Histogram(单调栈)
    csu 1392 Number Trick (数论)
    ACM 奋斗的小蜗牛
    ACM 16进制的简单运算
    ACM 交换输出
    ACM Longest Repeated Sequence
    ACM Arithmetic Expression
    ACM 素数
    ACM 无线网络覆盖
  • 原文地址:https://www.cnblogs.com/fengju/p/6336151.html
Copyright © 2020-2023  润新知