养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

如何使用ListView显示10行文字在手机界面上

时间:2024-11-09 05:45:53

CommonAdapter+ViewHolder实现listview显示

工具/原料

搭建好java开发环境的电脑一台

AndroidStudio

方法/步骤

1、用AndroidStudio建好项目

2、新建抽象类CommonAdapt娣定撰钠erpublicabstractclassCommonAdapter媪青怍牙<T>extendsBaseAdapter{//声明为protected,让子类继承,子类默认继承父类的属性(权限允许下)protectedContextmContext;protectedList<T>mDatas=newArrayList<T>();protectedLayoutInflatermInflater;protectedintlayoutId;publicCommonAdapter(Contextcontext,intlayoutId,List<T>mDatas){this.mContext=context;this.layoutId=layoutId;this.mDatas=mDatas;mInflater=LayoutInflater.from(context);}@OverridepublicintgetCount(){returnmDatas.size();}@OverridepublicTgetItem(intposition){returnmDatas.get(position);}@OverridepubliclonggetItemId(intposition){returnposition;}//因为不同的Bean对应的getView方法不同,所以把getView方法声明为抽象方法@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){ViewHolderviewHolder=ViewHolder.get(mContext,convertView,parent,layoutId,position);convert(viewHolder,getItem(position));returnviewHolder.getConvertView();}/***不同的子类重写自己的convert方法初始化item中的组件*@paramviewHolder*@paramt*/protectedabstractvoidconvert(ViewHolderviewHolder,Tt);}

3、新建类ViewHolderpub盟敢势袂licclassViewHolder{//SparseArray类似于hash罄休卦咦Map,是<int,Object>的键值对,效率比HashMap要高privateSparseArray<View>mViews;privateViewmConvertView;privateintposition;publicViewHolder(Contextcontext,ViewGroupparent,intlayoutId,intposition){this.position=position;mViews=newSparseArray<View>();mConvertView=LayoutInflater.from(context).inflate(layoutId,parent,false);mConvertView.setTag(this);}publicstaticViewHolderget(Contextcontext,ViewconverView,ViewGroupparent,intlayoutId,intposition){if(converView==null){returnnewViewHolder(context,parent,layoutId,position);}else{ViewHolderviewHolder=(ViewHolder)converView.getTag();//position要随之改变viewHolder.position=position;returnviewHolder;}}/***通过viewId获取控件,使用泛型返回一个继承于View的对象T,使用于各种View组件*@paramviewId*@param<T>*@return*/public<TextendsView>TgetView(intviewId){Viewview=mViews.get(viewId);if(view==null){view=mConvertView.findViewById(viewId);mViews.put(viewId,view);}return(T)view;}publicViewgetConvertView(){returnmConvertView;}//方法返回值为ViewHolder类型,返回this,使得该方法可以进行链式编程//就像AlertDialog的setTitle().setMessage().setXXX().onCreate()publicViewHoldersetText(intviewId,Stringtext){TextViewtextView=getView(viewId);textView.setText(text);returnthis;}publicViewHoldersetImageBySrc(intviewId,intresId){ImageViewimageView=getView(viewId);imageView.setImageResource(resId);returnthis;}publicViewHoldersetImageByBitmap(intviewId,Bitmapbitmap){ImageViewimageView=getView(viewId);imageView.setImageBitmap(bitmap);returnthis;}publicViewHoldersetImageByUrl(intviewId,Stringurl){ImageViewimageView=getView(viewId);/***使用ImageLoader加载网络图片,如Volley的ImageLoader*/returnthis;}publicintgetPosition(){returnposition;}publicvoidsetPosition(intposition){this.position=position;}}

4、在xml文件中加入以下代码<ListViewandroid:id="@+id/lv_contact"android:layout_width="wrap_content"android:layout_height="match_parent"/>

5、可以再新建一个xml文件定义listview每一个ListItem的样式,文件名为item,默认样式如下图

如何使用ListView显示10行文字在手机界面上

6、定义一个String类型的数组,把要显示的文字存进数组。数组名如list

7、privateListViewlistview;CommonAdapter<String>adapter=newCommonAdapter<String>(this,R.layout.item,list){@Overrideprotectedvoidconvert(ViewHolderviewHolder,finalStringlist){for(inti=0;i<10;i++){viewHolder.setText(R.id.friend_list_name,list.get(i));}}};listview.setAdapter(adapter);

© 一点知识