首页 > 其他分享 >安卓之各种Adapter优劣分析

安卓之各种Adapter优劣分析

时间:2023-12-15 13:23:13浏览次数:35  
标签:Adapter int 优劣 安卓 视图 public Override data 适配器

文章摘要

   在 Android 开发中,适配器(Adapter)是一种非常重要的设计模式,它用于将数据与视图组件进行绑定。适配器可以帮助我们在不同的视图组件(如 ListView、GridView、RecyclerView 等)中展示数据,而无需为每个组件编写重复的代码。以下是 Android 中常用的几种适配器,以及它们的适用情况、优劣分析和示例代码。

正文

ArrayAdapter

适用情况

   ArrayAdapter 适用于将数据列表(如字符串数组或 List)绑定到 ListView、Spinner 等视图组件。

优势

   使用简单,易于理解和使用。它可以自动为列表视图生成布局和视图。

劣势

   不够灵活,不能自定义视图的样式和布局。

示例代码:

// 创建一个字符串数组

String[] data = {"Item 1", "Item 2", "Item 3"};

// 创建一个 ArrayAdapter

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);

// 将适配器设置为 ListView 的适配器

ListView listView = findViewById(R.id.listView);

listView.setAdapter(adapter);

 

SimpleCursorAdapter

适用情况

   适用于简单的数据集,如Cursor查询结果。适用于将数据列表(如 Map 或 List 的集合)绑定到 ListView、GridView 等视图组件。

优点

   简单易用,只需提供数据集和视图项的映射即可。

缺点

   不适合大型数据集,因为它需要遍历整个数据集以查找对应的数据项。

示例代码:

java

String[] fromColumns = {DBHelper.KEY_NAME};

int[] toViews = {android.R.id.text1};

SimpleCursorAdapter adapter = new SimpleCursorAdapter(

this,

android.R.layout.simple_list_item_1,

cursor,

fromColumns,

toViews,

0

);

listView.setAdapter(adapter);

 

CursorAdapter

适用情况

   处理大量数据,并且需要高效滚动的场景。

优点

   结合了 Cursor 的优点,可以高效地处理大数据量。

缺点

   定制性较弱,需要自己实现 ViewHolder 模式来提高性能。

示例代码:

java

class MyCursorAdapter extends CursorAdapter {

public MyCursorAdapter(Context context, Cursor c) {

super(context, c, FLAG_AUTO_REQUERY);

}

@Override

public View newView(Context context, Cursor cursor, ViewGroup parent) {

return LayoutInflater.from(context).inflate(R.layout.my_row_layout, parent, false);

}

@Override

public void bindView(View view, Context context, Cursor cursor) {

TextView textView = (TextView) view.findViewById(R.id.title_text_view);

textView.setText(cursor.getString(cursor.getColumnIndex("title")));

}

}

 

BaseAdapter

适用情况

   BaseAdapter 适用于需要自定义适配器的场景,如在 ListView、GridView 等视图组件中展示复杂的数据结构。

优势

   提供了更高的灵活性,可以自定义视图的样式和布局。

劣势

   使用较为复杂,需要手动创建布局和视图,不如内置的 Adapter 方便。

示例代码:

public class MyAdapter extends BaseAdapter {

private Context context;

private List<String> data;

public MyAdapter(Context context, List<String> data) {

this.context = context;

this.data = data;

}

@Override

public int getCount() {

return data.size();

}

@Override

public Object getItem(int position) {

return data.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

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

if (convertView == null) {

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = inflater.inflate(R.layout.custom_list_item, parent, false);

}

TextView textView = convertView.findViewById(R.id.textView);

textView.setText(data.get(position));

return convertView;

}

}

// 创建一个数据列表

List<String> data = new ArrayList<>();

data.add("Item 1");

data.add("Item 2");

data.add("Item 3");

// 创建一个 MyAdapter

MyAdapter adapter = new MyAdapter(this, data);

// 将适配器设置为 ListView 的适配器

ListView listView = findViewById(R.id.listView);

listView.setAdapter(adapter);

  

RecyclerView.Adapter

适用情况

   处理大量数据并且需要高性能滚动的场景,如在列表、网格或瀑布流布局中展示数据。

优点

   高度优化,支持各种数据集和布局类型。

缺点

   需要熟悉 RecyclerView 的使用方法,学习成本稍高。但是,由于RecyclerView的使用日益普遍,很多开发者和库已经提供了可重用的适配器实现,例如Google提供的StaggeredGridLayoutManager和GridLayoutManager等。

示例代码:

class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {

private List<String> data;

public MyRecyclerViewAdapter(List<String> data) {

this.data = data;

}

@NonNull

@Override

public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_row_layout, parent, false);

return new ViewHolder(itemView);

}

@Override

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

holder.textView.setText(data.get(position));

}

@Override

public int getItemCount() {

return data.size();

}

static class ViewHolder extends RecyclerView.ViewHolder {

TextView textView;

public ViewHolder(View itemView) {

super(itemView);

textView = itemView.findViewById(R.id.title_text_view);

}

}

}

// 创建一个数据列表

List<String> data = new ArrayList<>();

data.add("Item 1");

data.add("Item 2");

data.add("Item 3");

// 创建一个 MyAdapter

MyRecyclerViewAdapter adapter = new MyRecyclerViewAdapter(data);

// 将适配器设置为 RecyclerView 的适配器

RecyclerView recyclerView = findViewById(R.id.recyclerView);

recyclerView.setLayoutManager(new LinearLayoutManager(this));

recyclerView.setAdapter(adapter);

 

PagerAdapter

   PagerAdapter是Android开发中一个关键的组件,主要用于填充和管理ViewPager中的页面。作为ViewPager的适配器,PagerAdapter的主要作用是将多个页面绑定到一起,实现连续滑动的效果。根据不同的场景和需求,我们可以选择不同类型的适配器,如 FragmentPagerAdapter、FragmentStatePagerAdapter 和 PagerAdapter。

适用情况

   需要实现滑动切换效果的应用,如图片轮播、新闻阅读等。

   当应用中包含大量的页面数据,并且需要高效地管理和显示这些数据时,例如电商平台的商品列表、社交应用的消息列表等。

优点

   能够管理大量页面数据:当需要展示的页面数量较多时,PagerAdapter可以提供很好的支持。

   强大的页面切换和滑动效果:借助于ViewPager控件,PagerAdapter可以实现用户所期待的流畅滑动效果。

   灵活的局部更新:当只有部分页面内容发生变化时,PagerAdapter可以进行局部刷新,提高应用性能。

缺点

   复杂的使用方法:PagerAdapter的使用相对复杂,需要覆盖特定的方法并处理生命周期等细节。

   性能问题:在处理大量数据或复杂布局时,PagerAdapter的性能可能会受到影响。

示例代码

public class MyPagerAdapter extends PagerAdapter {

private List<View> views;

public MyPagerAdapter(List<View> views) {

this.views = views;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

View view = views.get(position);

container.addView(view);

return view;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView((View) object);

}

@Override

public int getCount() {

return views.size();

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

}

List<Fragment> fragments = new ArrayList<>();

// 填充 fragments 列表

MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), fragments);

ViewPager viewPager = findViewById(R.id.view_pager);

viewPager.setAdapter(adapter);

 

总结

   总的来说,选择哪种 Adapter 主要取决于你的具体需求和应用场景。例如,如果你只是想快速展示一些静态数据,那么 ArrayAdapter 可能就足够了。但是,如果你需要处理大量的动态数据,那么 RecyclerView.Adapter 可能是更好的选择。无论你选择哪种 Adapter,都应该注意适当地管理和更新数据源,以确保界面的正确显示。

 

标签:Adapter,int,优劣,安卓,视图,public,Override,data,适配器
From: https://www.cnblogs.com/hxznfuture/p/17903159.html

相关文章

  • (原创)安卓快速使用简单的BottomNavigation(结合fragment)
    原创声明:本文所有图片和代码皆由本人制作和编写。目录前言目标效果第0步导入库第1步准备好一些资源fragmentdrawable图标第一小步第二小步第二步创建menu第三步创建navigation注意第四步绑定前言这篇文章是边写大作业边查资料边写的,查了很多资料,翻了很多论坛,也遇到了很多......
  • Flutter开发之安卓打包,和获取签名相关信息,公钥值相关操作
    我们Flutter开发中,难免有些小朋友因需求要获取打包签名的一些相关信息,下面我们来讲一下怎么获取一生成签名文件我们打包安卓APK包需要先生成签名文件,需运行以下指令,生成签名文件keytool-genkey-v-keystoreGMT\_keystore.keystore-aliasGMT\_keystore-keyalgRSA-keysi......
  • Qt/C++视频监控安卓版/多通道显示视频画面/录像存储/视频播放安卓版/ffmpeg安卓
    一、前言随着监控行业的发展,越来越多的用户场景是需要在手机上查看监控,而之前主要的监控系统都是在PC端,毕竟PC端屏幕大,能够看到的画面多,解码性能也强劲。早期的手机估计性能弱鸡,而现在的手机性能不是一般的牛,甚至超越了PC机的性能,所以手机上查看多路监控也就有了硬件基础前提。对......
  • 安卓之各组件的LayoutParams分析
    文章摘要     在Android开发中,LayoutParams是一个非常重要的概念,它用于描述View在其父容器中的布局行为。不同的ViewGroup有不同的LayoutParams子类,例如LinearLayout.LayoutParams、RelativeLayout.LayoutParams等。本文将分析各组件的LayoutParams获取方式,区别,并附上示......
  • 安卓读写文件的方法以及优劣分析
    文章摘要    在Android开发中,数据的存储和读取是应用程序中常见的操作之一。本文将详细介绍Android中读写文件的方法,并对其优劣进行分析。同时,将附上相应的实现代码,以便读者更好地理解。正文使用Java的IO流    在Android中,我们可以使用Java的文件IO类来读取和写入本地文件......
  • 安卓手机设置代理
    设置代理:adbshellsettingsputglobalhttp_proxyip:port如:adbshellsettingsputglobalhttp_proxy192.168.200.102:8888adbshellsettingsputglobalhttp_proxy192.168.43.127:8887移除代理:adbshellsettingsdeleteglobalhttp_proxyadbshellsettingsdeleteglob......
  • ubuntu 下 docker 中部署 jenkins,并配置安卓 python 开发环境
    1、ubuntu中下载AndroidSdk#安装unzip工具sudoaptupdatesudoaptinstallunzip#下载AndroidSDKwgethttps://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip#解压unzipcommandlinetools-linux-7302050_latest.zip-dandroid......
  • 安卓读写文件的方法以及优劣分析
    文章摘要在Android开发中,数据的存储和读取是应用程序中常见的操作之一。本文将详细介绍Android中读写文件的方法,并对其优劣进行分析。同时,将附上相应的实现代码,以便读者更好地理解。正文使用Java的IO流在Android中,我们可以使用Java的文件IO类来读取和写入本地文件系统......
  • SAP CRM 和 ERP 系统之间的主数据同步 - PRODUCT_R3_ADAPTER
    SAPCRM系统中的Middleware是一个关键的集成组件,它允许CRM系统和其他SAP或非SAP系统交换和同步数据。Middleware提供了一种机制,允许在异构系统环境中实现数据和业务过程的一致性。在这个上下文中,PRODUCT_R3_ADAPTER是一种特定的Middleware组件,它主要负责处理CRM系......
  • 什么是 SAP CRM Middleware Component 里的 PRODUCT_R3_ADAPTER
    在SAPCRM系统中,Middleware是一种关键的技术组件,用于在不同的系统之间实现数据交换和集成。Middleware负责确保不同系统之间的数据同步和协作,从而支持企业业务流程的无缝集成。在Middleware的体系结构中,PRODUCT_R3_ADAPTER是一个重要的组件,用于处理与SAPR/3系统相关的产品数据同......