当前位置: 首页 > 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/14431825/

相关文章:

  • 中国建设银行官方网站纪念币网站建设公司人员组成
  • 企业网站改版计划书网站怎么做可以合法让别人充钱
  • 北京网站开发网站开发公司做网站用旧域名好不好
  • 办事处网站建设长春火车站咨询电话号码是多少
  • 网站城市切换如何做网站建设要知道的
  • 做网站的公司一年能赚多少钱哪个网站可以做任务
  • 引擎网站推广法怎么做建立网站的过程
  • 用模板做企业网站WordPress密码重设怎么改
  • 旅游网站网页设计网站为什么要挂服务器
  • 洛阳市河阳建设工程有限公司网站成都微信网站建设报价
  • 怀柔建设网站行业导航类网站模板
  • 联谊会建设网站鲜花销售网站建设策划表
  • 烟台网站制作方案团总支网站建设宣传
  • 网站建设 中山wordpress注册完成请检查电子邮件
  • 网站开发学历要求网站使用流程图
  • vps网站设置学习搭建网站
  • 建立什么网站赚钱域名抢住网站
  • 同一个域名可以做几个网站吗wordpress模板资源
  • 乌当区城乡建设局网站肃北蒙古族自治县建设局网站
  • 赤坎手机网站建设公司永嘉网站优化
  • 可信网站验证 费用谷歌google play官网
  • 如何宣传网站网站建设方面
  • 手机网站后期维护聊城开发区人才网
  • 手机网站返回跳转页面内部购物券网站怎么做
  • 建筑设计师专业网站西宁做网站制作的公司
  • 宝塔做网站安全吗做搜索网站能发财吗
  • 如何建立公司网站推广怎么申请微信小程序开店铺
  • 小说类网站功能建设个人网站备案填写要求
  • 深圳网站建设公司联华大连市招标网公示
  • 新塘网站建设备案用网站建设方案书