小工具知识网

当前位置: 首页 > 行业知识 > Android Studio开发App:ListView和RecyclerView的使用

行业知识

Android Studio开发App:ListView和RecyclerView的使用

2026-11-10 13:18:09 来源:互联网转载

一、Listview的使用

1、ListView的使用

(1)ArrayAdapter适配器

        ArrayAdapter可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入。而且ArrayAdapter有多个构造函数的重载,我们可以根据实际情况选择最合适的一种。例如,我们将希望用ListView展示出来的数据放在一个String类型的数组中,具体如下所示:

String[] data={"菠萝","芒果","石榴"};

为了展示String类型的数据,我们可以创建一个String类型的适配器。具体如下所示:

ArrayAdapter adapter=new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,data);

然后通过setAdapter函数将适配器加载到控件中:

listView.setAdapter(adapter);

(2)点击事件响应

        在实际使用过程中,如果我们想要进一步了解ListView中某一项的内容,我们需要点击了解详情,因此,我们可以给ListView设置一个点击事件响应。具体代码如下所示:

public void onItemClick(AdapterView parent, View view, int i, longl) {

(3)结果展示

        最终效果如下图所示:

2、定制ListView界面

(1)自定义适配器

        由于我们在实际使用过程中希望使用一些其他的展现方式,例如图文混排,因此我们需要自定义一个适配器FruitAdapter来继承ArrayAdapter。具体代码如下所示:

FruitAdapter adapter=new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitlist);

 (2)自定义类

        List泛型中既包括图片又包括文本,因此我们需要自定义一个Fruit类,并将所有我们希望展示的物品属性罗列其中。具体代码如下所示:

public class Fruit {    private int imageID;    private String name;    private String price;}

(3)inflate方法

        inflate方法用于将子容器控件嵌入到父容器控件中,该方法共有三个参数,第一个参数为自己设计的子容器布局,第二个参数为父容器控件布局,第三个布尔参数值表明是否连接该布局和其父容器控件,在这里情况设置为false,因为系统已经插入了这个布局到父控件,设置为true将会产生多余的一个ViewGroup。具体代码如下所示:

inflate(R.layout.fruit_item,parent,false)

(4)提升ListView运行效率

        目前ListView的运行效率较低,以为在FruitAdapter类的getView方法中,每次都将布局重新加载了一遍,在快速滚动的时候,这将会成为性能的瓶颈,若数据列表中存在大量数据,运行时可能会出现加载时间过长等一系列问题。因此,我们需要使用convertView参数,用于将之前加载好的布局进行缓存,以便之后可以进行使用。具体代码如下所示:

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

除了通过convertView参数来进行缓存,我们还可以通过新增内部类ViewHolder来对控件实例进行缓存。内部类ViewHolder如下所示:

private class ViewHolder {    ImageView fruitimage;    TextView fruitname;    TextView fruitprice;}

当convertView参数值为nulll时,创建一个ViewHolder对象:

if (convertView==null){    viewHolder=new ViewHolder();}

并将控件的实例都存放在ViewHolder中,然后调用View的setTag方法,将对象存储在View中。具体代码如下所示:

view.setTag(viewHolder);

如果convetView不为null,则调用View的getTag方法将ViewHolder重新取出,具体代码如下所示:

else {    view=convertView;    viewHolder= (ViewHolder) view.getTag();//重新获取 viewHolder}

(5)运行结果展示

 2、RecyclerView的使用

        RecyclerView提供了三种布局管理器,即LinearLayoutManager线性布局管理器、StaggeredGridLayoutManager瀑布流管理器、GridLayoutManager网格布局管理器,这三种布局管理器都是通过setLayoutManager方法来设置的。

(1)LinearLayoutManager线性布局管理器

        LinearLayoutManager可以设置横向滚动和纵向滚动,只需通过setOrientation函数设置滚动方向即可。纵向滚动代码如下所示:

layoutManager .setOrientation(RecyclerView.VERTICAL);

运行结果如下所示:

横向滚动代码如下所示:

layoutManager .setOrientation(RecyclerView.HORIZONTAL);

 运行结果如下所示:

 (2)网格布局管理器GridLayoutManager

        我们可以通过GridLayoutManager方法中的第二个参数设置网格的列数,第三个参数设置网格 排列方向:RecyclerView.HORIZONTAL表示横向排列,Recycler.VERTICAL表示纵向排列。具体代码如下所示:

GridLayoutManager layoutManager = new GridLayoutManager(this, 5 ,RecyclerView.HORIZONTAL,false);

运行效果图如下所示:

 (4)StaggeredGridLayoutManager瀑布流布局

        我们可以通过StaggeredGridLayoutManager方法中的第一个参数来设置瀑布流的列数,通过第二个参数来设置瀑布流的滑动方向:StaggeredGridLayoutManager.VERTICAL表示纵向滚动,StaggeredGridLayoutManager.HORIZONTAL表示横向滚动。具体代码如下所示:

StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager( 3 ,StaggeredGridLayoutManager.VERTICAL);

运行效果如下所示:

上一篇:服务器界面怎么做raid?

下一篇:源码揭秘,打造优质网站的实战步骤与技巧