使用RecyclerView制作微信联系人页——Activity到Fragment的移植方法

本文介绍如何在Android项目中使用RecyclerView创建类似微信通讯录的效果,并将其从Activity移植到Fragment。内容涵盖项目要求、设计效果、实现思路、遇到的问题及解决方案,包括添加支持库、设置布局、实现动画、适配器操作等。文章最后提供了代码示例和完整代码链接。
摘要由CSDN通过智能技术生成

项目要求

  • 使用RecyclerView实现一个微信通讯录

设计效果

  • 垂直item列表
  • 按姓名首字母排序
  • 根据右侧首字母bar快速查找
  • 左滑删除联系人

效果演示

在这里插入图片描述

项目结构

在这里插入图片描述

实现思路

  • 添加支持库打开应用模块的 build.gradle 文件dependencies 部分
dependencies {
   
    implementation 'com.android.support:recyclerview-v7:28.0.0'
}
  • 将 RecyclerView 添加到布局中
  • 添加列表适配器RecyclerView.Adapter
  • 调用适配器的 onCreateViewHolder() 方法
  • 为列表项添加动画
  • 根据网络上已有的demo将activity修改移植进wechat已有的fragment中

遇到的困难

网络上的实例是一个完整的activity,尝试过把Activity嵌入到现有的Fragment中行不通,因为Fragment依赖于父Activity而存在,不能本末倒置。

后来采用的方法是直接将demo Activity修改成Fragment
这里需要注意几点:

  1. 在Fragment里面的onCreate()函数内,是没有办法使用findViewById、setContentView这些函数的。因为Fragment本身并没有提供这些方法。于是我们只能通过onCreateView和onViewCreated来实现对显示的控制
  2. 布局通过inflate
    将this替换为this.getActivity()
    将findViewById替换为view.findViewById
  3. onCreateView的作用是返回一个view
  4. onViewCreated的作用是进行Fragment的初始化动作
  5. 原本的demo中重载了onCreateOptionsMenu函数来显示选项卡,但Fragment中不支持它故将其删除,解决方法是将其放入MainActivity中重载

代码示例

Frd_Fragment

public class Frd_Fragment extends Fragment {
   
    ContactModel mModel;
    private SideBar mSideBar;
    private ZSideBar mZSideBar;
    private TextView mUserDialog;
    private TouchableRecyclerView mRecyclerView;
    private List<ContactModel.MembersEntity> mMembers = new ArrayList<>();
    private CharacterParser characterParser;
    private PinyinComparator pinyinComparator;
    private ContactAdapter mAdapter;
    private List<ContactModel.MembersEntity> mAllLists = new ArrayList<>();
    private int mPermission;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   
        return inflater.inflate(R.layout.tab02, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
   
        super.onViewCreated(view, savedInstanceState);
        getPermission();
        initView(view);
    }

    private void initView(View view) {
   
        characterParser = CharacterParser.getInstance();
        pinyinComparator = new PinyinComparator();
        mSideBar = (SideBar) view.findViewById(R.id.contact_sidebar);
        mZSideBar = (ZSideBar) view.findViewById(R.id.contact_zsidebar);
        mUserDialog = (TextView) view.findViewById(R.id.contact_dialog);
        mRecyclerView = (TouchableRecyclerView) view.findViewById(R.id.contact_member);
        mSideBar.setTextView(mUserDialog);

//        fillData();
        getNetData(0)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用RecyclerView生成微信列表的步骤如下: 1. 首先,在你的布局文件中添加一个RecyclerView控件,用于显示微信列表。可以参考以下代码示例: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 在你的ActivityFragment中,找到RecyclerView控件并进行初始化。可以参考以下代码示例: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); ``` 3. 创建一个适配器类,用于将数据绑定到RecyclerView上。适配器需要继承RecyclerView.Adapter,并实现以下几个方法: - onCreateViewHolder: 创建ViewHolder,并将布局文件与ViewHolder进行关联。 - onBindViewHolder: 将数据绑定到ViewHolder上。 - getItemCount: 返回数据集合的大小。 可以参考以下代码示例: ```java public class WeChatAdapter extends RecyclerView.Adapter<WeChatAdapter.ViewHolder> { private List<WeChatMessage> messageList; public WeChatAdapter(List<WeChatMessage> messageList) { this.messageList = messageList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_wechat_message, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { WeChatMessage message = messageList.get(position); holder.bindData(message); } @Override public int getItemCount() { return messageList.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { private TextView tvName; private ImageView ivAvatar; public ViewHolder(@NonNull View itemView) { super(itemView); tvName = itemView.findViewById(R.id.tvName); ivAvatar = itemView.findViewById(R.id.ivAvatar); } public void bindData(WeChatMessage message) { tvName.setText(message.getName()); ivAvatar.setImageResource(message.getAvatar()); } } } ``` 4. 准备数据集合,用于显示在RecyclerView上。可以根据你的需求创建一个包含微信消息的列表。 5. 将适配器和数据集合关联到RecyclerView上。可以参考以下代码示例: ```java List<WeChatMessage> messageList = new ArrayList<>(); // 添加数据到messageList WeChatAdapter adapter = new WeChatAdapter(messageList); recyclerView.setAdapter(adapter); ``` 6. 最后,你可以根据需要设置RecyclerView的布局管理器、分割线等。例如,使用LinearLayoutManager实现纵向布局: ```java LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); ``` 这样,你就可以使用RecyclerView生成微信列表了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值