您的位置 首页 > 雕刻工具

listview,ListView

大家好,如果您还对listview不太了解,没有关系,今天就由本站为大家分享listview的知识,包括ListView的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

ListView是Android中显示数据常用的控件之一,主要用于显示一个垂直滚动的数据集合,随着Android手机对性能要求越来越高,一个更现代,更灵活,显示列表性能更优异的RecyclerView将会逐渐取代ListView的数据显示方式,但是目前为止,ListView在开发中还是十分常见的,并未被弃用。

ListView继承关系如下:

?android.widget.AdapterView<android.widget.ListAdapter>

ListView常用XML属性

ListViewXML常用属性如下:

ListView常用来显示同分类数据,常用使用方法如下:

ListmAddHeaderFooterList=newArrayList<String>();

2.将数据源添加到适配器中

ArrayAdapteradapter=newArrayAdapter<String>(this,\nandroid.R.layout.simple_list_item_1,mAddHeaderFooterList);\n

3.将适配器中的数据添加到ListView中

mListView.setAdapter(adapter);

<ListView\nandroid:id="@+id/lv_entries"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent"\nandroid:divider="@android:color/darker_gray"\nandroid:dividerHeight="2dp"\nandroid:visibility="gone"\nandroid:entries="@array/citys"/>\n填充数据如下array数组资源

<string-arrayname="citys">

publicvoidListViewArrayList(Viewview){

mListViewArray.setVisibility(View.VISIBLE);

finalString[]citys=getResources().getStringArray(R.array.citys);

//ArrayAdapteradapter=newArrayAdapter<String>(ListViewMethods.this,

//android.R.layout.simple_expandable_list_item_1,citys);

//3.将适配器中的数据加载到ListView控件中

mArrayList=Arrays.asList(citys);

ArrayAdapteradapter=newArrayAdapter<String>(ListViewMethods.this,

android.R.layout.simple_expandable_list_item_1,mArrayList);

mListViewArray.setAdapter(adapter);

1.添加头布局方法

2.添加尾布局方法

ListView.addFooterView(View)\n

3.ListView数据为空时,设置空布局方法

\npublicvoidListViewHAddHeaderFooter(Viewview){\nClearAllView();\nmListAddHeadFooter.setVisibility(View.VISIBLE);\n//准备数据源\nmAddHeaderFooterList=newArrayList<String>();\nfor(inti=0;i<6;i++){\nmAddHeaderFooterList.add("测试"+i);\n}\n//将数据源添加到适配器中\nfinalArrayAdapteradapter=newArrayAdapter<String>(\nListViewMethods.this,android.R.layout.simple_list_item_1,\nmAddHeaderFooterList);\n//添加listview头\nimageHeader=newImageView(this);\nimageHeader.setLayoutParams(newAbsListView.LayoutParams(\nViewGroup.LayoutParams.MATCH_PARENT,\nViewGroup.LayoutParams.WRAP_CONTENT));\nimageHeader.setImageResource(R.drawable.gril);\nimageHeader.setOnClickListener(newView.OnClickListener(){\n@Override\npublicvoidonClick(Viewv){\nintindex=mAddHeaderFooterList.size();\nfor(inti=index;i<index+20;i++){\nmAddHeaderFooterList.add("加载更多数据内容"+i);\n}\nadapter.notifyDataSetChanged();\n}\n});\nmListAddHeadFooter.addHeaderView(imageHeader);\n//添加listview尾\nbtnFooter=newButton(this);\nbtnFooter.setLayoutParams(newAbsListView.LayoutParams(\nViewGroup.LayoutParams.MATCH_PARENT,\nViewGroup.LayoutParams.WRAP_CONTENT));\nbtnFooter.setText("点击加载更多");\nbtnFooter.setOnClickListener(newView.OnClickListener(){\npublicvoidonClick(Viewv){\nintindex=mAddHeaderFooterList.size();\nfor(inti=index;i<index+20;i++){\nmAddHeaderFooterList.add("加载更多"+i);\n}\nadapter.notifyDataSetChanged();\n}\n});\nmListAddHeadFooter.addFooterView(btnFooter);\nTextViewtv=newTextView(this);\ntv.setLayoutParams(newAbsListView.LayoutParams(\nViewGroup.LayoutParams.MATCH_PARENT,\nViewGroup.LayoutParams.WRAP_CONTENT));\ntv.setText("数据为空");\nmListAddHeadFooter.setEmptyView(tv);\n//将适配器中的数据添加到ListView中\nmListAddHeadFooter.setAdapter(adapter);\n}\n5.使用SimpleAdapter为Listview适配图文实现效果如下

SimpleAdapter

\npublicvoidListViewSimpleAdapter(Viewview){\nClearAllView();\nmListViewSimple.setVisibility(View.VISIBLE);\nint[]images={R.drawable.gril,R.drawable.ic_launcher,\nR.drawable.gril,R.drawable.ic_launcher,R.drawable.gril,\nR.drawable.ic_launcher,R.drawable.gril,\nR.drawable.ic_launcher,R.drawable.gril,};\nmSimpleList=newArrayList<Object>();\n//准备数据\nfor(inti=0;i<images.length;i++){\nMap<String,Object>map=newHashMap<String,Object>();\nmap.put("img",images[i]);\nmap.put("text","item"+i);\nmSimpleList.add(map);\n}\n/**\n*将数据源的数据加载到适配器中SimpleAdaptercontext:上下文对象data:表示加载到适配器中的数据对象\n*resource:表示adapter控件中每项资源idfrom:表示数据源map中key的数组,表示key指定的值\n*to:表示需要展示对应数据的控件资源id\n*\n*通过from和to的对应,将from中key值对应的数据指定的显示到to指定资源id的控件中\n*\n***/\nSimpleAdapteradapter=newSimpleAdapter(ListViewMethods.this,\nmSimpleList,R.layout.listview_item_img_tv,newString[]{\n"img","text"},newint[]{R.id.img,R.id.tv});\n//将适配器中的数据添加到控件中\nmListViewSimple.setAdapter(adapter);\n}\n使用的item布局如下

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:gravity="center_vertical"

android:src="@drawable/ic_launcher"/>

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:textColor="@android:color/darker_gray"

android:gravity="center_vertical"

publicvoidListViewBaseAdapter(Viewview){

mListViewBase.setVisibility(View.VISIBLE);

mBaseAdapterList=newArrayList<Map<String,Object>>();

int[]images={R.drawable.gril,R.drawable.ic_launcher,

R.drawable.gril,R.drawable.ic_launcher,R.drawable.gril,

R.drawable.ic_launcher,R.drawable.gril,

R.drawable.ic_launcher,R.drawable.gril,};

for(inti=0;i<images.length;i++){

Map<String,Object>map=newHashMap<String,Object>();

MyBaseAdapteradapter=newMyBaseAdapter();

mListViewBase.setAdapter(adapter);

classMyBaseAdapterextendsBaseAdapter{

//当前适配器中加载数据的总条目

returnmBaseAdapterList.size();

//根据指定下标获取对应item的view

publicObjectgetItem(intposition){

returnmBaseAdapterList.get(position);

//根据指定下标获取当前item的id

publiclonggetItemId(intposition){

*获取适配器控件中的View对象,得到用于展示数据的视图intposition,:当前item的下标ViewconvertView,

*表示可复用的ViewViewGroupparent当前绘制的item所属的listview

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

//表示第一次运行创建,否则复用view

convertView=LayoutInflater.from(ListViewMethods.this)

.inflate(R.layout.listview_item_img_tv,null);

mHolder.tv=(TextView)convertView.findViewById(R.id.tv);

mHolder.img=(ImageView)convertView.findViewById(R.id.img);

mHolder=(Holder)convertView.getTag();

mHolder.tv.setText((String)mBaseAdapterList.get(position).get(

mHolder.img.setImageResource((Integer)mBaseAdapterList.get(

<?xmlversion="1.0"encoding="utf-8"?>\n<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent"\nandroid:orientation="horizontal">\n<ImageView\nandroid:id="@+id/img"\nandroid:layout_width="wrap_content"\nandroid:layout_height="match_parent"\nandroid:layout_margin="5dp"\nandroid:gravity="center_vertical"\nandroid:src="@drawable/ic_launcher"/>\n<TextView\nandroid:id="@+id/tv"\nandroid:layout_width="wrap_content"\nandroid:layout_height="match_parent"\nandroid:layout_margin="5dp"\nandroid:textColor="@android:color/darker_gray"\nandroid:text="test"\nandroid:gravity="center_vertical"\nandroid:textSize="25sp"/>\n</LinearLayout>\n7.ListView分类显示实现效果如下:

ListView分类显示

\npublicvoidListViewTypeBaseAdapter(Viewview){\nClearAllView();\nmListViewType.setVisibility(View.VISIBLE);\nMyTypeBaseAdaptermyTypeBaseAdapter=newMyTypeBaseAdapter();\nmListViewType.setAdapter(myTypeBaseAdapter);\n}\nclassMyTypeBaseAdapterextendsBaseAdapter{\nprivateString[]tittles={"分类一:水果","分类二:蔬菜"};\nprivateString[]mTypeOneList={"苹果","香蕉","梨","西瓜","菠萝"};\nprivateString[]mTypeTwoList={"番茄","土豆","大葱","辣椒","莲藕","白菜",\n"萝卜","豆角","芹菜","茄子"};\nint[]typeOneImages={R.drawable.gril,R.drawable.ic_launcher,\nR.drawable.gril,R.drawable.ic_launcher,R.drawable.gril};\nint[]typeTwoImages={R.drawable.gril,R.drawable.ic_launcher,\nR.drawable.gril,R.drawable.ic_launcher,R.drawable.gril,\nR.drawable.gril,R.drawable.ic_launcher,R.drawable.gril,\nR.drawable.ic_launcher,R.drawable.gril};\n@Override\npublicintgetCount(){\nreturnmTypeOneList.length+mTypeTwoList.length+2;\n}\n@Override\npublicObjectgetItem(intposition){\nif(position==0||position==mTypeOneList.length+1){\nreturn0;\n}else{\nif(position<mTypeOneList.length+1){\nreturnmTypeOneList[position];\n}else{\nreturnmTypeTwoList[position-mTypeOneList.length-2];\n}\n}\n}\n@Override\npubliclonggetItemId(intposition){\nreturnposition;\n}\n@Override\npublicViewgetView(intposition,ViewconvertView,ViewGroupparent){\nintmode=getItemViewType(position);\nif(mode==0){\nViewTitleHolderholder=null;\nif(convertView==null){\nconvertView=View.inflate(getApplicationContext(),\nR.layout.listview_type_tv,null);\nholder=newViewTitleHolder();\nholder.textView=(TextView)convertView\n.findViewById(R.id.tv);\nconvertView.setTag(holder);\n}else{\nholder=(ViewTitleHolder)convertView.getTag();\n}\nif(position==0){\nholder.textView.setText(tittles[position]);\n}else{\nholder.textView.setText(tittles[1]);\n}\nreturnconvertView;\n}else{\nViewHolderholder=null;\nif(convertView==null){\nconvertView=View.inflate(getApplicationContext(),\nR.layout.listview_item_img_tv,null);\nholder=newViewHolder();\nholder.imageView=(ImageView)convertView\n.findViewById(R.id.img);\nholder.textView=(TextView)convertView\n.findViewById(R.id.tv);\nconvertView.setTag(holder);\n}else{\nholder=(ViewHolder)convertView.getTag();\n}\nif(position<mTypeOneList.length+1){\nholder.textView.setText(mTypeOneList[position-1]);\nholder.imageView\n.setImageResource(typeOneImages[position-1]);\n}else{\nholder.textView.setText(mTypeTwoList[position\n-mTypeOneList.length-2]);\nholder.imageView.setImageResource(typeTwoImages[position\n-mTypeOneList.length-2]);\n}\nreturnconvertView;\n}\n}\n@Override\npublicintgetItemViewType(intposition){\nif(position==0||position==mTypeOneList.length+1){\nreturn0;\n}else{\nreturn1;\n}\n}\n@Override\npublicintgetViewTypeCount(){\nreturnsuper.getViewTypeCount()+1;\n}\n}\nstaticclassViewHolder{\nImageViewimageView;\nTextViewtextView;\n}\nstaticclassViewTitleHolder{\nTextViewtextView;\n}\n使用的item布局如下

<?xmlversion="1.0"encoding="utf-8"?>\n<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"\nandroid:layout_width="match_parent"\nandroid:layout_height="wrap_content"\nandroid:orientation="vertical">\n<TextView\nandroid:id="@+id/tv"\nandroid:background="@android:color/darker_gray"\nandroid:padding="5dp"\nandroid:paddingLeft="10dp"\nandroid:textSize="16sp"\nandroid:textColor="@android:color/white"\nandroid:layout_width="match_parent"\nandroid:layout_height="wrap_content"/>\n</LinearLayout>\n

友情推荐:

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

关于listview到此分享完毕,希望能帮助到您。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023