行业知识
Android Studio开发App:ListView和RecyclerView的使用
一、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?