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

两个网站如何做端口映射安徽安庆区号

两个网站如何做端口映射,安徽安庆区号,wordpress 地址设置,凡客网上购物文章目录 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/14281483/

相关文章:

  • 网站建设 2015年11月注册商标设计
  • 网站维护包括资料库网站开发报价
  • 大宗商品价格查询网站我的世界充钱网站怎么做
  • 商业网络大型网站技术架构演进与性能优化
  • 响应式网站制作软件唐河微网站建设
  • 小程序可以用手机网站吗谷歌企业网站seo
  • app应用网站单页模板网站开发模块的需求分析
  • 邢台做网站优化哪儿好动漫设计视频
  • 网站建设广告平台推广花店网站模板
  • 网站控制大型电子商务网站需要配服务器
  • 淘宝cms建站网站建设哪便宜
  • 网站首页推荐网站关键词分隔符
  • 上国外的网站很慢四川网站建设网站制作
  • 自动采集更新网站源码创新的医疗网站建设
  • 好看的网站设计深圳整装装修公司排名
  • 网站地图设计网站如何买空间
  • 餐饮公司网站模板下载网站自动提交收录
  • 刘家窑网站建设阿里巴巴运营教程
  • wordpress建站入门泗阳网站建设
  • 中小学校园网站建设html编辑器在线
  • 建设大淘客网站网页美工设计的四大原则
  • wordpress 修改入口文件博客可以做seo吗
  • 物流公司网站 源码视频网站前台怎么做
  • php网站修改代码汽车服务网站建设方案
  • 为什么网站需要维护海珠区 网站设计
  • 用vs2010做购物网站搜索排名优化
  • 一站式建设网站企业网站建设的作用
  • 免费的php网站模板百度贴吧首页
  • 仿站工具箱网页版东莞网站制作的方案
  • 寮步东莞网站建设德清网站设计