Android基础_需要使用adapter的控件,以及对BaseAdapter及其中的ViewHolder进行重构(三)

来源:互联网 发布:网络教育第二学位 编辑:程序博客网 时间:2024/05/21 09:13

Tag属性的使用

        Button btn=(Button)findViewById(R.id.btn);        /*设置Tag,设置一个tag对应的对象,相当与给Button绑定一个对象         * btn.setTag(Obj)         * 结论:只要是控件,都可以缓存一个对象         * */        btn.setTag("Hello");

Onclick

    <Button        android:id="@+id/btn"        android:onClick="hello"  //可通过该方法直接创建点击事件        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />        /*     * onClick对应的属性值就是方法名     * 必须是public void hello(View v){}     * 不推荐使用,不太符合java面向对象的编程思想     */    public void hello(View v){        Log.v("me",(String)v.getTag());    }

GridView

//需要设置numColumns属性//其余使用方法同LV//已经过时了,现在一般推荐使用recyclerview代替lv,gv    <GridView        android:id="@+id/lv"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:numColumns="4"         />

Spinner下拉框

<!-- spinnermdoe修改下拉模式:dialog dropdown -->    <Spinner        android:id="@+id/lv"        android:layout_width="wrap_content"        android:layout_height="45dp"        android:spinnerMode="dialog"         />  使用方法同listview,使用adapter       

对BaseAdapter和ViewHolder进行抽取

public abstract class MyBaseAdapter<T,VH extends MyBaseAdapter.ViewHolder> extends BaseAdapter {    //在构造器中初始化两个属性,数据和context    public ArrayList<T> mList;    public Context context;    public VH mHolder;    public MyBaseAdapter(ArrayList<T> list, Context context) {        mList = list;        this.context = context;        mHolder=initViewHolder();    }    public abstract VH initViewHolder();    @Override    public int getCount() {        return mList!=null?mList.size():0;    }    @Override    public T getItem(int position) {        return mList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public abstract View getView(int position, View convertView, ViewGroup parent);    public abstract class ViewHolder{}}//使用方法    public class lvAdapter extends MyBaseAdapter<String,lvAdapter.MyViewHolder>{        public lvAdapter(ArrayList list, MainActivity context) {            super(list, context);        }        @Override        public MyViewHolder initViewHolder() {            return new MyViewHolder();        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            if (convertView==null){                convertView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);                mHolder.tv= (TextView) convertView.findViewById(android.R.id.text1);                convertView.setTag(mHolder);            }else{                mHolder= (MyViewHolder) convertView.getTag();            }            mHolder.tv.setText(mList.get(position));            return convertView;        }        public class MyViewHolder extends MyBaseAdapter.ViewHolder{            TextView tv;        }    }
阅读全文
0 0
原创粉丝点击