Android listview 专题
- 格式:docx
- 大小:1.01 MB
- 文档页数:75
Android基础篇之在ListView中显示网络图片大家知道ImageView 类虽然有一个setImageUri 方法,但不能直接接受一个由网络地址生成的uri 作为参数从而显示图片,我们只好使用其 setImageBitmap 方法,如view plaincopy to clipboardprint?1.BitmapmBitmap=null;2.3.URLurl=new URL(imageUrl);4.5.HttpURLConnectionconn=(HttpURLConnection)url.openConnection();6.7.InputStream is=conn.getInputStream();8.9.mBitmap=BitmapFactory.decodeStream(is);在SimpleAdapter中需要一个数据源,用来存储数据的,在显示图片时我们要用HashMap<>存储一个Bitmap;但仅存取了Bitmap时在ListView中是无法显示图片的,我们需要对SimpleAdapter进行处理 。
如下是对SimpleAdaptr处理的主要代码:view plaincopy to clipboardprint?1.adapter.setViewBinder(new ViewBinder(){2.3.publicboolean setViewValue(Viewview,Objectdata,4.StringtextRepresentation){5.//判断是否为我们要处理的对象6.if(view instanceof ImageView&&data instanceof Bitmap){7.ImageViewiv=(ImageView)view;8.9.iv.setImageBitmap((Bitmap)data);10.returntrue;11.}else12.returnfalse;13.}14.});看API对Android.widget.SimpleAdapter.ViewBinder的解释:This class can be used by external clients of SimpleAdapter to bind values to views. You should use this class to bind values to views that are not directly supported by SimpleAdapter or to change the way binding occurs for views supported by SimpleAdapter.你可以使用该类来处理SimpleAdapter不直接支持的数据;下面来看看完整的代码:main.xml 中就是一个ListView , list_item.xml 是为ListView中控件提供布局 ,就是一个ImageView。
Android⼊门教程之ListView的具体使⽤详解⽬录ListView 的简单⽤法定制 ListView 的界⾯提升 ListView 的运⾏效率ListView 的点击事件ListView 的简单⽤法在布局中加⼊ ListView 控件还算简单,先为 ListView 指定⼀个 id,然后将宽度和⾼度都设置为 match_parent,这样ListView 就占满了整个布局的空间<LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>接下来修改 MainActivity 中的代码class MainActivity : AppCompatActivity() {private val data = listOf("Apple", "Banana", "Orange", "Watermelon","Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango","Apple", "Banana", "Orange", "Watermelon", "Pear", "Grape","Pineapple", "Strawberry", "Cherry", "Mango")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(yout.activity_main)val adapter = ArrayAdapter<String>(this, yout.simple_list_item_1, data)listView.adapter = adapter}}先将数据准备好,然后借助适配器将数据传递给 ListView。
安卓ListView的使⽤1.简单介绍ListViewlistview是⼀个以垂直⽅式在项⽬中显⽰视图的列表。
是⼀种不能实现确定视图中的内容的适配器视图(adapter view)。
数据和视图的绑定,需要通过继承ListViewAdapter接⼝的适配器实现。
确保当上下滚动的时候,能够动态刷新视图内容。
通常我们都会⾃定义⼀个继承⾃BaseAdapter(已继承ListViewAdapter),ArrayAdapter(继承⾃BaseAdapter),SimpleAdapter(继承⾃BaseAdapter)的类,重写getView()⽅法,实现⾃⼰想要的功能。
getView⽅法详情View getView (int position, View convertView, ViewGroup parent)Get a View that displays the data at the specified position in the data set.You can either create a View manually or inflate it from an XML layout file.When the View is inflated, the parent View (GridView, ListView...) will applydefault layout parameters unless you use inflate(int, android.view.ViewGroup, boolean) tospecify a root view and to prevent attachment to the root备注:使⽤适配器构建布局。
如果布局的内容是属于动态或未预先确定的内容,您可以使⽤这样⼀种布局:在运⾏时通过⼦类 AdapterView⽤视图填充布局。
AdapterView类的⼦类使⽤ Adapter将数据与其布局绑定。
Android优化系列之ListView优化⽼⽣常谈本⽂内容:adapter,listview的优化,RecycleBi,google⼤会推荐优化,实现ListView的过程,Adapter起到了⾄关重要的作⽤,不仅仅因为getview()⽅法。
那么,先从Adapter说起~Adapter: 它在ListView和数据源之间起到桥梁的作⽤,避免listview和数据源直接接触,⽽导致因为数据源的复杂性使listview显得臃肿。
Adapter,适配器,把复杂的数据源适配给listview,很容易联想到适配器模式。
下⾯是⼏种常⽤的Adapter: ArrayAdapter:简单易⽤的Adapter,通常⽤于数组或list集合的数据源(多个值包装成多个列表项)。
simpleAdapter:并不见得、功能强⼤的Adapter,可⽤于list集合的多个对象包装成多个列表项。
simpleCursorAdapter:与上相似,但是⽤于包装jCursor(数据库游标)提供的数据源。
BaseAdapter:通常⽤于被扩展。
扩展BaseAdapter可以对各列表项进⾏最⼤限度的定制。
下⾯是listview的优化:增加优化⼀:convertView的使⽤,主要优化加载布局问题 1.listivew每次滚动都会调⽤gitview()⽅法,所以优化gitview是重中之重。
下⾯是getview()在Adapter类的源码,这个没有实现,要看重点部分已经颜⾊标记。
⽆⾮是View convertView的介绍~/*** Get a View that displays the data at the specified position in the data set. You can either* create a View manually or inflate it from an XML layout file. When the View is inflated, the* parent View (GridView, ListView...) will apply default layout parameters unless you use* {@link youtInflater#inflate(int, android.view.ViewGroup, boolean)}* to specify a root view and to prevent attachment to the root.** @param position The position of the item within the adapter's data set of the item whose view* we want.* @param convertView The old view to reuse, if possible. Note: You should check that this view* is non-null and of an appropriate type before using. If it is not possible to convert* this view to display the correct data, this method can create a new view.* Heterogeneous lists can specify their number of view types, so that this View is* always of the right type (see {@link #getViewTypeCount()} and* {@link #getItemViewType(int)}).* @param parent The parent that this view will eventually be attached to* @return A View corresponding to the data at the specified position.*/View getView(int position, View convertView, ViewGroup parent);⼤家对于 convertView = null优化⽅法的使⽤已经了然于胸,但是我那个纠结,就知道是缓存了listview⾥⾯已经加载好的view(下⽂会讲解)。
海文国际Android之ListView一、列表(ListView)在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。
二、列表(ListView)的显示需要三个元素1.ListView 用来展示列表的View。
2.适配器用来把数据映射到ListView上的中介。
3.数据具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter其中以ArrayAdapter最为简单,只能展示一行字。
SimpleAdapter有最好的扩充性,可以自定义出各种效果。
SimpleCursorAdapter可以认为是SimpleAdapter 对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
ListView lstView;三、ListView事件setOnItemClickListener(点击触摸屏有效)当项被点击后触发setOnItemSelectListener(点击手机键盘有效,4.*后点击也有效)ListView lstCourse;四、ListView提升效率由于展示空间有限,即使有多个item,界面上只能展示有限的个数,这个时候只海文国际 需要把有限个View展示在界面上就可以了.最上方划出的View被接下来的进入界面的最下面的View重复利用的话,就可以大幅度的减少创建View的次数,这样效率得到了提升.getView方法我们是实现者,android的ListView是调用者,ListView会为我们传入convertView的值.当有可以重复利用的View时候,convertView为这个View的值,否则为null.通过持有者模式优化布局,进行动态加载(使用到ConvertView)在convertView中保存持有者对象,convertView.setTag(wrapper)再从缓存中获取持有者对象wrapper = (ViewWrapper)convertView.getTag()建立持有者类ViewWrapper(自定义,主要进行所有视图控件的存放),产生对象wrapper海文国际五、ListActivity当Activity只涉及到一个列表,那么应该考虑将Activity创建成为ListActivity 的子类,而不是以Activity为基类.当你想自定义布局时候,只需要把ListView标示为@android:id/list,ListActivity 就知道哪个部件是这个活动的主列表.海文国际。
1. 下面的代码是mars老师视频教程里的代码,我把它注释了一下。
2. 创建两个XML布局文件main.xml和user.xml。
main.xml文件为系统自动创建main.xml布局文件代码:[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<LinearLayout xmlns:android="/apk/res/android"3.android:orientation="vertical"4.android:layout_width="fill_parent"5.android:layout_height="fill_parent">6.7.<LinearLayout android:id="@+id/listLinearLayout"<!-- 设置LinearLayout的ID -->8.android:layout_width="fill_parent"<!-- 设置LinearLayout宽度为填满整个屏幕 -->9.android:layout_height="wrap_content"<!-- 设置LinearLayout高度适应内部控件的高度 -->10.android:orientation="vertical"><!-- 设置LinearLayout的排列方式为纵向排列 -->11.12.<!-- 在LinearLayout里嵌套一个ListView控件 -->13.<ListView android:id="@id/android:list"<!-- 设置ListView控件的ID,这个ID为android系统内置ID -->14.android:layout_width="fill_parent"<!-- 设置ListView控件的宽度为填满整个屏幕 -->15.android:layout_height="wrap_content"<!-- 设置ListView控件的高度为自适应 -->16.android:drawSelectorOnTop="false"<!-- 设置ListView控件条目被按下时背景颜色在文字背后,设置成True时背景色会覆盖文字 -->17.android:scrollbars="vertical"/><!-- 设置ListView控件滚动条的方向为纵向 -->18.19.</LinearLayout>20.</LinearLayout>ListViw控件中的ID (android:id="@id/android:list") 是Android系统内置的ID,不能改为其他。
Android滚动菜单ListView实例详解本⽂实例为⼤家分享了Android使⽤ListView实现滚动菜单的具体代码,供⼤家参考,具体内容如下说明:滚动菜单ListView及点击事件代码结构:1、创建⼀个list展⽰模型app\src\main\res\layout\fruit_item.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/fruit_image"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/fruit_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_vertical"android:layout_marginLeft="10dp"/></LinearLayout>2、主界⾯引⽤⼀下app\src\main\res\layout\activity_main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ListViewandroid:id="@+id/list_view"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>3、创建fruit类app\src\main\java\com\example\listviewtest\Fruit.javapackage com.example.listviewtest;public class Fruit {private String name;private int imageId;public Fruit(String name,int imageId){ = name;this.imageId = imageId;}public String getName(){return name;}public int getImageId(){return imageId;}}4、创建适配器app\src\main\java\com\example\listviewtest\FruitAdapter.javapackage com.example.listviewtest;import android.content.Context;import youtInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;public class FruitAdapter extends ArrayAdapter<Fruit> {private int resourceId;public FruitAdapter(Context context,int textViewResourceId,List<Fruit> object){super(context,textViewResourceId,object);resourceId = textViewResourceId;}public View getView(int position, View converView, ViewGroup parent){Fruit fruit = getItem(position);View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);fruitImage.setImageResource(fruit.getImageId());fruitName.setText(fruit.getName());return view;}}5、主内容app\src\main\java\com\example\listviewtest\MainActivity.javapackage com.example.listviewtest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {private List<Fruit> fruitList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);initFruits();//初始化⽔果数据FruitAdapter adapter = new FruitAdapter(MainActivity.this,yout.fruit_item,fruitList); ListView listView = (ListView) findViewById(R.id.list_view);listView.setAdapter(adapter);//响应点击事件listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {Fruit fruit = fruitList.get(i);Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show(); }});}private void initFruits(){for (int i=0;i<2;i++){Fruit apple = new Fruit("Apple",R.drawable.apple_pic);fruitList.add(apple);Fruit banana = new Fruit("Banana",R.drawable.banana_pic);fruitList.add(banana);Fruit cherry = new Fruit("Cherry",R.drawable.cherry_pic);fruitList.add(cherry);Fruit grape = new Fruit("Grape",R.drawable.grape_pic);fruitList.add(grape);Fruit mango = new Fruit("Mango",R.drawable.mango_pic);fruitList.add(mango);Fruit orange = new Fruit("Orange",R.drawable.orange_pic);fruitList.add(orange);Fruit pear = new Fruit("Pear",R.drawable.pear_pic);fruitList.add(pear);Fruit pineapple = new Fruit("Pineapple",R.drawable.pineapple_pic);fruitList.add(pineapple);Fruit strawberry = new Fruit("Strawberry",R.drawable.strawberry_pic);fruitList.add(strawberry);Fruit watermeion = new Fruit("Watermeion",R.drawable.watermeion_pic);fruitList.add(watermeion);}}}运⾏展⽰:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
ListView用法介绍public class ListView extends AbsListViewng.Objectandroid.view.Viewandroid.view.ViewGroupandroid.widget.AdapterView<T extends android.widget.Adapter> android.widget.AbsListViewandroid.widget.ListView直接子类ExpandableListView (使用竖滚动条查看的两级列表视图)类概述通过竖滚动条查看的列表视图。
ListAdapter里包含的内容和此视图相关联。
参见List View tutorial。
内部类class ListView.FixedViewInfo表示一个列表中的固定视图,如放在最顶部的页眉和最底部的页脚XML属性常量Int CHOICE_MODE_MULTIPLE(常量值为2)列表允许同时选取多项Int CHOICE_MODE_NONE(常量值为0)普通列表,不指明选取模式Int CHOICE_MODE_SINGLE(常量值为1)列表只允许选取最多一项公共方法public void addFooterView (View v)加一个固定显示于list底部的视图。
如果此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。
加入的视图可取得焦点。
注意:在调用setAdapter之前调用此方法。
这样的话,可以利用点击光标来收起有header view和footer view的ListView。
参数v 要加的视图public void addFooterView (View v, Object data, boolean isSelectable)加一个固定显示于list底部的视图。
如果此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。
加入的视图可取得焦点。
Android列表控件ListView详解ListView绝对可以称得上是Android中最常⽤的控件之⼀,⼏乎所有应⽤程序都会⽤到它。
由于⼿机屏幕空间都⽐较有限,能够⼀次性在屏幕上显⽰的内容并不多,当我们的程序中有⼤量的数据需要展⽰的时候,就可以借助ListView来实现。
----------------------------------------------ListView简易⽤法------------------------------------------------------创建⼀个ListViewTest项⽬,让Android Studio⾃动创建好活动。
然后修改activity_main.xml中的代码,如下:引⼊了ListView后,即使你的ListView没有内容,可视化编辑器preview仍然会这样显⽰:接下来修改MainActivity中的代码,如下所⽰:直接在MainActivity中定义字符串数组虽然可以达到⽬的,但是不便于管理。
可以在res⽬录下的values⽂件夹下新建⼀个array.xml⽂件,内容如下:通过Resources对象获得array.xml的内容:最终结果如下:-----------------------------------------------------适配器的介绍------------------------------------------------------既然ListView是⽤于展⽰⼤量数据的,这些数据可以是从⽹上下载的,也可以是从数据库中读取的,应该视具体的应⽤场景来决定。
数组中的数据是⽆法直接传递给ListView的,还需要借助适配器来完成。
Android中提供了很多的适配器的实现类,其中最简单的就是ArrayAdapter(注意不是SimpleAdapter)。
它可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传⼊即可。
android listview 用法Android ListView 用法概述ListView是Android中最常用的控件之一,它可以展示一组垂直滚动的项目列表。
本文将介绍ListView的用法和一些常见的实例。
基本用法1.首先,在XML布局中添加ListView控件。
2.在Java代码中,通过findViewById方法获取ListView对象的引用。
3.创建一个适配器Adapter,并将其与ListView关联。
4.定义一个数据集,用于存储要显示的项目。
5.将数据集与适配器关联。
6.最后,调用ListView的setAdapter方法来设置适配器。
适配器的使用1.ArrayAdapter:用于将数组或List对象中的数据逐一显示在ListView上。
2.SimpleAdapter:用于将Map对象中的数据显示在ListView上。
3.BaseAdapter:是一个抽象类,需要继承并实现其中的方法,以自定义数据和布局的显示方式。
列表项的点击事件1.使用setOnItemClickListener方法为ListView设置一个项目点击事件的监听器。
2.在监听器中重写onItemClick方法,用于处理项目点击事件。
列表项的自定义布局1.创建一个XML布局文件,定义列表项的样式。
2.在适配器的getView方法中,使用LayoutInflater类将XML布局文件转换为View对象。
3.返回View对象作为列表项的显示。
列表项的滑动删除1.实现列表项的滑动删除功能,可以使用SwipeRefreshLayout和RecyclerView组合方法。
2.在RecyclerView的Adapter中,为列表项绑定一个滑动删除的动作。
3.在动作中,更新数据集并通知列表刷新。
列表项的滑动加载更多1.使用RecyclerView和分页加载的方法实现列表项的滑动加载更多功能。
2.在滑动到列表底部时,触发加载更多的操作。
Android ListView专题之一多层树完美实现.xml:代码<?xml version="1.0"encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:id="@+id/icon"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_alignParentBottom="true"android:layout_alignParentTop="true"android:layout_marginRight="6.0dip"/><!--<TextView android:id="@+id/text"android:layout_gravity="center_vertical"android:layout_weight="1.0"android:layout_height="wrap_content"android:layout_width="0dip"android:textAppearance="?android:attr/textAppearanceMedium"android:singleLine="true"android:textColor="#ffffff" />--><TextViewandroid:id="@+id/text"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_alignParentBottom="true"android:layout_alignParentTop="true"android:layout_toRightOf="@id/icon"android:gravity="center_vertical"android:singleLine="true"android:textAppearance="?android:textAppearanceMedium"android:textColor="#ffffff"/></RelativeLayout>TreeElement.java:private String id;private String outlineTitle;privateboolean mhasParent;privateboolean mhasChild;private TreeElement parent;privateint level;private ArrayList<TreeElement>childList = new ArrayList<TreeElement>();public String getId() {return id;}publicvoid setId(String id) {this.id = id;}public String getOutlineTitle() {return outlineTitle;}publicvoid setOutlineTitle(String outlineTitle) {this.outlineTitle = outlineTitle;}publicboolean isMhasParent() {return mhasParent;}publicvoid setMhasParent(boolean mhasParent) { this.mhasParent = mhasParent;}publicboolean isMhasChild() {return mhasChild;}publicvoid setMhasChild(boolean mhasChild) { this.mhasChild = mhasChild;}publicint getLevel() {return level;}publicvoid setLevel(int level) {this.level = level;}publicboolean isExpanded() {return expanded;}publicvoid setExpanded(boolean expanded) { this.expanded = expanded;}public TreeElement getParent() {return parent;}publicvoid setParent(TreeElement parent) { this.parent = parent;}// private OutlineElement outlineElement; privateboolean expanded;c.parent = this;c.level = this.level + 1;}public TreeElement(String id, String title) {super();this.id = id;this.outlineTitle = title;this.level = 0;this.mhasParent = true;this.mhasChild = false;this.parent = null;}public TreeElement(String id, String outlineTitle, boolean mhasParent,boolean mhasChild, TreeElement parent, int level, boolean expanded) { super();this.id = id;this.outlineTitle = outlineTitle;this.mhasParent = mhasParent;this.mhasChild = mhasChild;this.parent = parent;if (parent != null) {this.parent.getChildList().add(this);}this.level = level;this.expanded = expanded;}}TreeView.java:@Overridepublicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initialData();treeViewAdapter = new TreeViewAdapter(this, yout.main,mPdfOutlinesCount);setListAdapter(treeViewAdapter);registerForContextMenu(getListView());}mPdfOutlinesCount.add(element1);mPdfOutlinesCount.add(element2);mPdfOutlinesCount.add(element9);element2.addChild(element3);element1.addChild(element4);element1.addChild(element5);element1.addChild(element6);element1.addChild(element7);element7.addChild(element8);element9.addChild(element10);element9.addChild(element11);element11.addChild(element12);element11.addChild(element13);element10.addChild(element14);element10.addChild(element15);element10.addChild(element16);element10.addChild(element17);element10.addChild(element18);element10.addChild(element19); }publicint getCount() {return mfilelist.size();}public Object getItem(int position) {return position;}publiclong getItemId(int position) {return position;}@Overridepublicvoid onClick(View v) {Log.i("TreeView", "obj.id:" + obj.getId());}});holder.icon.getPaddingTop(), 0,holder.icon.getPaddingBottom());holder.text.setText(obj.getOutlineTitle());if (obj.isMhasChild() && (obj.isExpanded() == false)) {holder.icon.setImageBitmap(mIconCollapse);} elseif (obj.isMhasChild() && (obj.isExpanded() == true)) {holder.icon.setImageBitmap(mIconExpand);} elseif (!obj.isMhasChild()) {holder.icon.setImageBitmap(mIconCollapse);holder.icon.setVisibility(View.INVISIBLE);}return convertView;}class ViewHolder {TextView text;ImageView icon;}}@Overrideprotectedvoid onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id);Log.i("TreeView", "position:" + position);if (!mPdfOutlinesCount.get(position).isMhasChild()) {Toast.makeText(this, mPdfOutlinesCount.get(position).getOutlineTitle(), 2000);return;}if (mPdfOutlinesCount.get(position).isExpanded()) {mPdfOutlinesCount.get(position).setExpanded(false);TreeElement element = mPdfOutlinesCount.get(position);ArrayList<TreeElement> temp = new ArrayList<TreeElement>();for (int i = position + 1; i <mPdfOutlinesCount.size(); i++) {if (element.getLevel() >= mPdfOutlinesCount.get(i).getLevel()) { break;}temp.add(mPdfOutlinesCount.get(i));}mPdfOutlinesCount.removeAll(temp);treeViewAdapter.notifyDataSetChanged();// setListAdapter(fileExploreAdapter);} else {TreeElement obj = mPdfOutlinesCount.get(position);obj.setExpanded(true);int level = obj.getLevel();int nextLevel = level + 1;for (TreeElement element : obj.getChildList()) {element.setLevel(nextLevel);element.setExpanded(false);mPdfOutlinesCount.add(position + 1, element);}treeViewAdapter.notifyDataSetChanged();// setListAdapter(fileExploreAdapter);}}}在res/xml文件夹下面新建attrs.xmlJava代码<?xml version="1.0"encoding="utf-8"?><resources><declare-styleable name="TopBar"><attrname="title"format="string"/><attrname="titleTextSize"format="dimension"/><attrname="titleTextColor"format="color"/><attrname="leftTextColor"format="color"/><attrname="leftBackground"format="string"/><attrname="leftText"format="string"/><attrname="rightTextColor"format="color"/><attrname="rightBackground"format="string"/><attrname="rightText"format="string"/></declare-styleable></resources>布局文件:Java代码<?xml version="1.0"encoding="utf-8"?><FrameLayout xmlns:android="/apk/res/android"xmlns:custom="/apk/res/com.android.custom"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#ff00ff00"/><com.android.custom.TopBarandroid:id="@+id/topBar"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#0000ff"custom:leftBackground="@drawable/icon"custom:leftText="左侧"custom:leftTextColor="#123123"custom:rightBackground="@drawable/icon"custom:rightText="右侧"custom:rightTextColor="#ff0000"custom:title="自定义标题"custom:titleTextColor="#ff0000"custom:titleTextSize="14.0sp"></com.android.custom.TopBar></FrameLayout>Android ListView专题之二滚动卡的问题写了个类似下面的GridView,滚动的时候有卡或者跳格的现象,尤其当记录比较多的时候。