当前位置: 首页 > news >正文

两个网站如何做端口映射万彩动画大师

两个网站如何做端口映射,万彩动画大师,网站设计风格及特点,免费的网站登录模板文章目录 1、自定义Adapter关键函数getView()标准写法2、布局文件list_item_user.xml3、解释3、示例使用4、结果5、进一步优化和扩展5.1. **优化性能#xff1a;ViewHolder模式**5.2. **处理多种类型的视图**5.3. **使用RecyclerView.Adapter** 6、RecyclerView使用示例7、结果… 文章目录 1、自定义Adapter关键函数getView()标准写法2、布局文件list_item_user.xml3、解释3、示例使用4、结果5、进一步优化和扩展5.1. **优化性能ViewHolder模式**5.2. **处理多种类型的视图**5.3. **使用RecyclerView.Adapter** 6、RecyclerView使用示例7、结果8、结论 在Android开发中自定义Adapter是非常常见的用于为ListView、GridView、RecyclerView等视图提供数据。自定义Adapter的关键函数是 getView()方法它负责为每一项数据创建和返回一个View。以下是一个标准的自定义Adapter及其 getView()方法的详细用例和解释。 1、自定义Adapter关键函数getView()标准写法 假设我们有一个简单的用户数据类 public class User {private String name;private String email;public User(String name, String email) {this.name name;this.email email;}public String getName() {return name;}public String getEmail() {return email;} }自定义Adapter的实现 import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;import java.util.List;public class UserAdapter extends BaseAdapter {private Context context;private ListUser userList;private LayoutInflater inflater;public UserAdapter(Context context, ListUser userList) {this.context context;this.userList userList;this.inflater LayoutInflater.from(context);}Overridepublic int getCount() {return userList.size();}Overridepublic Object getItem(int position) {return userList.get(position);}Overridepublic long getItemId(int position) {return position;}Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (convertView null) {// Inflate the custom layoutconvertView inflater.inflate(R.layout.list_item_user, parent, false);// Initialize the ViewHolderviewHolder new ViewHolder();viewHolder.nameTextView convertView.findViewById(R.id.nameTextView);viewHolder.emailTextView convertView.findViewById(R.id.emailTextView);// Store the holder with the viewconvertView.setTag(viewHolder);} else {// Retrieve the view holderviewHolder (ViewHolder) convertView.getTag();}// Get the current userUser currentUser (User) getItem(position);// Set the user details to the viewviewHolder.nameTextView.setText(currentUser.getName());viewHolder.emailTextView.setText(currentUser.getEmail());return convertView;}// ViewHolder pattern to optimize list view performancestatic class ViewHolder {TextView nameTextView;TextView emailTextView;} }2、布局文件list_item_user.xml 这是自定义的布局文件定义了每个列表项的布局 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationverticalandroid:padding8dpTextViewandroid:idid/nameTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textSize16spandroid:textColorandroid:color/black /TextViewandroid:idid/emailTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textSize14spandroid:textColorandroid:color/darker_gray //LinearLayout3、解释 ViewHolder模式 ViewHolder是一个静态内部类用来缓存View。这样避免了每次调用getView()方法时都调用findViewById()方法提高了ListView的性能。 getView()方法 convertView参数是用于重用旧视图的。为了性能优化如果convertView不为null则可以重用。如果convertView为null意味着这是第一次创建这个视图需要使用LayoutInflater去加载布局并初始化ViewHolder。使用convertView.setTag(viewHolder)来存储ViewHolder对象方便后续重用。使用convertView.getTag()来获取缓存的ViewHolder对象避免重复调用findViewById()。最后将当前项的数据设置到ViewHolder中的各个控件上。 3、示例使用 假设在某个Activity中使用这个Adapter public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView listView findViewById(R.id.listView);// 示例数据ListUser users new ArrayList();users.add(new User(Alice, aliceexample.com));users.add(new User(Bob, bobexample.com));// 设置自定义AdapterUserAdapter adapter new UserAdapter(this, users);listView.setAdapter(adapter);} }4、结果 运行应用时ListView将显示用户列表每行包含用户名和电子邮件地址。通过使用ViewHolder模式确保了列表的高效滚动和视图重用。 5、进一步优化和扩展 5.1. 优化性能ViewHolder模式 在大数据集的情况下ViewHolder模式是非常重要的优化技术。它通过缓存View引用减少了不必要的视图查找操作。 // Adapter类中 Override public View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (convertView null) {// Inflate the custom layoutconvertView inflater.inflate(R.layout.list_item_user, parent, false);// Initialize the ViewHolderviewHolder new ViewHolder();viewHolder.nameTextView convertView.findViewById(R.id.nameTextView);viewHolder.emailTextView convertView.findViewById(R.id.emailTextView);// Store the holder with the viewconvertView.setTag(viewHolder);} else {// Retrieve the view holderviewHolder (ViewHolder) convertView.getTag();}// Get the current userUser currentUser (User) getItem(position);// Set the user details to the viewviewHolder.nameTextView.setText(currentUser.getName());viewHolder.emailTextView.setText(currentUser.getEmail());return convertView; }// ViewHolder pattern to optimize list view performance static class ViewHolder {TextView nameTextView;TextView emailTextView; }5.2. 处理多种类型的视图 有时我们需要在一个列表中展示不同类型的视图可以通过覆盖getViewTypeCount()和getItemViewType(int position)来实现。 Override public int getViewTypeCount() {// 两种不同的视图类型return 2; }Override public int getItemViewType(int position) {User user (User) getItem(position);if (user.isSpecialUser()) {return 0; // 特殊用户类型} else {return 1; // 普通用户类型} }Override public View getView(int position, View convertView, ViewGroup parent) {int viewType getItemViewType(position);ViewHolder viewHolder;if (convertView null) {switch (viewType) {case 0:// 特殊用户视图convertView inflater.inflate(R.layout.special_user_item, parent, false);viewHolder new SpecialViewHolder();viewHolder.specialTextView convertView.findViewById(R.id.specialTextView);break;case 1:// 普通用户视图convertView inflater.inflate(R.layout.list_item_user, parent, false);viewHolder new ViewHolder();viewHolder.nameTextView convertView.findViewById(R.id.nameTextView);viewHolder.emailTextView convertView.findViewById(R.id.emailTextView);break;}convertView.setTag(viewHolder);} else {viewHolder (ViewHolder) convertView.getTag();}// 填充数据User currentUser (User) getItem(position);if (viewType 0) {((SpecialViewHolder) viewHolder).specialTextView.setText(currentUser.getSpecialInfo());} else {viewHolder.nameTextView.setText(currentUser.getName());viewHolder.emailTextView.setText(currentUser.getEmail());}return convertView; }// 普通ViewHolder static class ViewHolder {TextView nameTextView;TextView emailTextView; }// 特殊用户ViewHolder static class SpecialViewHolder extends ViewHolder {TextView specialTextView; }5.3. 使用RecyclerView.Adapter 如果你的项目使用RecyclerView而不是ListView或GridView可以使用RecyclerView.Adapter来实现自定义Adapter。RecyclerView比ListView更强大和灵活并且内置了ViewHolder模式。 public class UserAdapter extends RecyclerView.AdapterUserAdapter.UserViewHolder {private ListUser userList;public UserAdapter(ListUser userList) {this.userList userList;}Overridepublic UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View itemView LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_user, parent, false);return new UserViewHolder(itemView);}Overridepublic void onBindViewHolder(UserViewHolder holder, int position) {User currentUser userList.get(position);holder.nameTextView.setText(currentUser.getName());holder.emailTextView.setText(currentUser.getEmail());}Overridepublic int getItemCount() {return userList.size();}public static class UserViewHolder extends RecyclerView.ViewHolder {public TextView nameTextView;public TextView emailTextView;public UserViewHolder(View view) {super(view);nameTextView view.findViewById(R.id.nameTextView);emailTextView view.findViewById(R.id.emailTextView);}} }6、RecyclerView使用示例 public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);RecyclerView recyclerView findViewById(R.id.recyclerView);// 示例数据ListUser users new ArrayList();users.add(new User(Alice, aliceexample.com));users.add(new User(Bob, bobexample.com));// 设置布局管理器recyclerView.setLayoutManager(new LinearLayoutManager(this));// 设置自定义AdapterUserAdapter adapter new UserAdapter(users);recyclerView.setAdapter(adapter);} }7、结果 在使用RecyclerView时列表项的视图会更高效地被管理和重用提供更平滑的滚动体验。 8、结论 无论是ListView还是RecyclerView自定义Adapter的getView()方法或onBindViewHolder()方法都是核心部分负责创建和绑定视图。使用ViewHolder模式可以显著提高性能。对于复杂的列表可以通过实现不同的视图类型来满足需求。RecyclerView提供了更灵活和高效的实现推荐在新的项目中使用。
http://www.hkea.cn/news/14442662/

相关文章:

  • 建网站商城有哪些公司wordpress固定链接目录
  • 什么是域名系统 网站建设教程网页游戏制作平台
  • 云一网站公司seo的中文是什么
  • 企业网站建设犇类建筑网站seo策划方案案例分析
  • 提供给他人做视频解析的网站源码杂粮网站建设的必要性
  • 佛山网站建设怎样做地方门户网站app
  • 宁波网站建设制作电话号码中小型企业网站优化推广
  • 做视频网站需要多少带宽wordpress php5.3版本
  • 如何做好品牌网站建设方案wordpress新建php页面模板
  • 触屏版网站设计唐山网站开发培训
  • 怎么自己建设网站企业微信软件
  • 平台网站开发多少钱网站开发费用预算
  • 做商品二维码检测的网站seo搜索引擎优化论文
  • 学做网站去哪学苏州建筑设计公司
  • 东台建设网站曲靖网站建设0doit
  • 爱站seo工具包下载小程序制作填写信息
  • 优必选网站网站排名怎么做
  • 怎样建设网站是什么样的建设行网站修改电话
  • 四川航天中瑞建设工程有限公司网站合肥网
  • 个人网站如何发布手机微信网站怎么做的好
  • 随州网站推广哪家专业网上交易系统
  • 直播网站基础建设搭建本地环境做网站
  • 如何给自己建设的网站设置登陆用户名和密码开发公司移交物业清单
  • 时代网站管理系统怎么做网站做一个网站一般费用
  • 做国外直播网站外包加工网是骗人的吗
  • 新余+网站建设特色软件app推荐
  • vs2012怎么做网站以太坊网站开发
  • 空间业务建设网站软件外包网
  • 连云港网站设计wordpress主题删除失败
  • 恩施哪里有做网站的网页设计企业网站设计的功能