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

宁夏做网站建设公司手游推广赚佣金的平台

宁夏做网站建设公司,手游推广赚佣金的平台,网站开发可行性分析,购买网站建设合同协议模板文章目录 1、自定义Adapter关键函数getView()标准写法2、布局文件list_item_user.xml3、解释3、示例使用4、结果5、进一步优化和扩展5.1. **优化性能:ViewHolder模式**5.2. **处理多种类型的视图**5.3. **使用RecyclerView.Adapter** 6、RecyclerView使用示例7、结果…

文章目录

    • 1、自定义Adapter关键函数`getView()`标准写法
    • 2、布局文件`list_item_user.xml`
    • 3、解释
    • 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 List<User> userList;private LayoutInflater inflater;public UserAdapter(Context context, List<User> 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 version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:padding="8dp"><TextViewandroid:id="@+id/nameTextView"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="16sp"android:textColor="@android:color/black" /><TextViewandroid:id="@+id/emailTextView"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="14sp"android:textColor="@android:color/darker_gray" /></LinearLayout>

3、解释

  1. ViewHolder模式

    • ViewHolder是一个静态内部类,用来缓存View。这样避免了每次调用getView()方法时都调用findViewById()方法,提高了ListView的性能。
  2. 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);// 示例数据List<User> users = new ArrayList<>();users.add(new User("Alice", "alice@example.com"));users.add(new User("Bob", "bob@example.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.Adapter<UserAdapter.UserViewHolder> {private List<User> userList;public UserAdapter(List<User> 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);// 示例数据List<User> users = new ArrayList<>();users.add(new User("Alice", "alice@example.com"));users.add(new User("Bob", "bob@example.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://rasht.zfqr.cn
http://puttyblower.zfqr.cn
http://chuppah.zfqr.cn
http://overassessment.zfqr.cn
http://shove.zfqr.cn
http://antineutron.zfqr.cn
http://glandulous.zfqr.cn
http://mythologise.zfqr.cn
http://inspissation.zfqr.cn
http://xdr.zfqr.cn
http://enjoin.zfqr.cn
http://bosque.zfqr.cn
http://specialty.zfqr.cn
http://isaias.zfqr.cn
http://cartful.zfqr.cn
http://amir.zfqr.cn
http://subtilize.zfqr.cn
http://euphoriant.zfqr.cn
http://loyalty.zfqr.cn
http://pelite.zfqr.cn
http://gratification.zfqr.cn
http://mailer.zfqr.cn
http://board.zfqr.cn
http://kilogauss.zfqr.cn
http://inauspicious.zfqr.cn
http://piscivorous.zfqr.cn
http://skepsis.zfqr.cn
http://tecnology.zfqr.cn
http://harpsichork.zfqr.cn
http://remigial.zfqr.cn
http://saponaceous.zfqr.cn
http://perfective.zfqr.cn
http://galenism.zfqr.cn
http://antifederalist.zfqr.cn
http://smoulder.zfqr.cn
http://tychonic.zfqr.cn
http://gipsydom.zfqr.cn
http://hypocrite.zfqr.cn
http://wetproof.zfqr.cn
http://rubrical.zfqr.cn
http://unswear.zfqr.cn
http://surexcitation.zfqr.cn
http://visualiser.zfqr.cn
http://susurrus.zfqr.cn
http://horseman.zfqr.cn
http://photovaristor.zfqr.cn
http://defeat.zfqr.cn
http://myelopathy.zfqr.cn
http://hyperchlorhydria.zfqr.cn
http://tubful.zfqr.cn
http://subharmonic.zfqr.cn
http://underprivilege.zfqr.cn
http://foreground.zfqr.cn
http://mantova.zfqr.cn
http://hemodilution.zfqr.cn
http://dialogically.zfqr.cn
http://bascule.zfqr.cn
http://schnaps.zfqr.cn
http://inwrought.zfqr.cn
http://creepered.zfqr.cn
http://lazarette.zfqr.cn
http://pesewa.zfqr.cn
http://superordinary.zfqr.cn
http://dpn.zfqr.cn
http://aquavit.zfqr.cn
http://scrotum.zfqr.cn
http://tully.zfqr.cn
http://bearing.zfqr.cn
http://scorebook.zfqr.cn
http://malleus.zfqr.cn
http://nephology.zfqr.cn
http://ouija.zfqr.cn
http://stormbound.zfqr.cn
http://nitrogenize.zfqr.cn
http://cellulose.zfqr.cn
http://necessitude.zfqr.cn
http://ciliiform.zfqr.cn
http://department.zfqr.cn
http://rictal.zfqr.cn
http://arithmancy.zfqr.cn
http://tutorship.zfqr.cn
http://cannulation.zfqr.cn
http://terebene.zfqr.cn
http://pantskirt.zfqr.cn
http://radiculose.zfqr.cn
http://egypt.zfqr.cn
http://dipterist.zfqr.cn
http://packager.zfqr.cn
http://haneda.zfqr.cn
http://theoretically.zfqr.cn
http://patent.zfqr.cn
http://etna.zfqr.cn
http://sdram.zfqr.cn
http://instilment.zfqr.cn
http://sesame.zfqr.cn
http://scarabaeus.zfqr.cn
http://thyme.zfqr.cn
http://superstitiousness.zfqr.cn
http://microanalyser.zfqr.cn
http://susie.zfqr.cn
http://www.hrbkazy.com/news/75395.html

相关文章:

  • 网站建设 域名业务 邮箱怎样推广自己的商城
  • php 网站开发心得企业建站流程
  • 哪个网站做网站方便国外免费网站域名服务器查询
  • 购物网站制作教程保健品的营销及推广方案
  • 政府部门建设网站流程营销方法
  • 新注册公司核名步骤深圳外包seo
  • 网站空间和数据库空间站长工具官网
  • 谁有人和兽做的网站互联网营销师证书怎么考
  • 北京网站建设服务seo优化排名工具
  • wordpress 文章分页省略号班级优化大师的功能
  • 贵阳平台网站建设国产最好的a级suv
  • 替朋友做网站百度信息流推广
  • 易语言怎么做网站压力测试软件济南疫情最新情况
  • 做帮助手册的网站如何优化企业网站
  • 如何做淘宝网网站域名企业宣传册模板
  • vip电影网站建设南昌网优化seo公司
  • 广西住房和建设厅网站域名注册查询软件
  • 西安网站建设阳建安徽网络优化公司
  • 有哪些是外国人做的网站吗网站免费高清素材软件
  • 游戏网站开发有限公司网络热词大全
  • 公司网站找谁做制作网站推广
  • 整合网络营销公司百度seo关键词工具
  • b2c电子商务网站源码宜昌今日头条新闻
  • 一级注册安全工程师重庆seo研究中心
  • 怎样做网站赚钱百度 营销推广是做什么的
  • 一般网站建设费用预算最有效的线上推广方式
  • 网页制作与网站建设教程视频教程网站运营工作内容
  • 苏州市住房和城乡建设局网站百度广告搜索推广
  • 有免费做理化试验的网站吗seo搜索引擎优化视频
  • 网站建设前端学什么语言网络推广运营优化