项目开发中经常需要去自定义适配器,若自定义适配器写得好整个界面就会非常的流畅,反之程序就歇菜了。下面先贴代码,再讲讲自定义适配器的过程中需要注意的细节。

首先是Activity的代码:

package com.example.textviewtest;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.widget.ListView;public class MainActivity extends Activity{    private static final String TAG = "MainActivity";    private String[] data = {"三星","小米","魅族","苹果","华为","一加","荣耀","Mate7","努比亚","OPPO","vivo","大神","乐视","小辣椒","P8","奇酷","锤子","金立"};    private ListView mListView;    private Context mContext;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mContext = this;        mListView = (ListView) this.findViewById(R.id.mListView);        MyAdapter mAdapter = new MyAdapter(mContext,data);        mListView.setAdapter(mAdapter);    }}

自定义适配器的代码:

package com.example.textviewtest;import android.content.Context;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MyAdapter extends BaseAdapter{    private Context mContext;    private String[] data;      public MyAdapter(Context mContext, String[] data) {        this.mContext = mContext;        this.data = data;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return data.length;    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return null;    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return 0;    }    @Override    public View getView(final int position, View convertView, ViewGroup viewGroup) {        View myView ;        ItemViewHolder itemViewHolder;        if(view == null) {             myView = View.inflate(mContext, R.layout.my_adapter, null);             itemViewHolder = new ItemViewHolder();             itemViewHolder.mTextView = (TextView) myView.findViewById(R.id.mTextView);             itemViewHolder.mButton = (Button) myView.findViewById(R.id.mButton);             myView.setTag(itemViewHolder);        } else {            myView = view;            itemViewHolder = (ItemViewHolder) view.getTag();        }                           itemViewHolder.mTextView.setText(data[position]);               itemViewHolder.mButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                            Toast.makeText(mContext, data[position], Toast.LENGTH_SHORT).show();                            }                   });        myView.setTag(itemViewHolder);        return myView;    }    public class ItemViewHolder {               public TextView mTextView;        public Button mButton;          }}

1、在适配器的构造函数中,我们将需要的数据源传入
2、利用Android的Recycler机制,利用convertView来重新回收View,避免每次都去创建新的View。
3、使用ViewHolder将需要缓存的view封装好,convertView的setTag就是将这些缓存起来供下次调用。因此,当第二次使用的时候只需要通过getTag()方法就可以获得ViewHolder对象

更多相关文章

  1. 还有比这更全的Android代码与驱动吗?
  2. Android(安卓)3.0 访问WebService或Socket 出现 android.os.Netw
  3. Android(安卓)常用代码集合
  4. Android(安卓)Studio使用gradle导出jar包并混淆代码代码记录一
  5. 定制Oreo 初步
  6. Android(安卓)代码混淆
  7. Android(安卓)onFragmentInteraction(Uri uri) 方法
  8. Android(安卓)Paint之MaskFilter详解
  9. 适配Android(安卓)N (7.0)需要解决的问题汇总

随机推荐

  1. Android(安卓)监控网络状态
  2. Android的AIDL以及挂断电话
  3. Cannot retrieve repository metadata (r
  4. WebStorm 2021.3 下载+破解补丁+破解教程
  5. GIT生成ssh秘钥windows
  6. GIT生成ssh秘钥linux
  7. PHP使用SW-X框架的Redis-UML组件,对用户信
  8. Docker部署homeassitant
  9. 微信点餐系统源码|微信点餐小程序
  10. ModStartBlog v5.0.0 发布 全新架构系统,