1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用RecyclerView 简单实现QQ好友列表展开效果

使用RecyclerView 简单实现QQ好友列表展开效果

时间:2021-09-30 05:00:02

相关推荐

使用RecyclerView 简单实现QQ好友列表展开效果

最近自己想捣鼓个社交类的app,所以想了解一下QQ列表的实现。对于这样的展开效果,我们很容易想到使用ExpandableListView类,当然我也是,但是我在网上看到有人用ListView套用listView的方法,本着学习的态度,我去研究了一下。思路明确,就是在ListView中的Item布局类再放一个ListView,然后通过对分组栏目的点击效果进行判别,分别展示和隐藏子ListView,实现该效果。

效果图如下:

思路就不说了,和ListView是一样的,都是两个控件的套用,代码也简单,相信都可以看得懂,直接上代码。

这里需要两个实体类:Group和GroupItem,分别用于存分组的信息以及其组员的信息。

package .friendlist.bean;import java.util.List;/*** Date: /10/25. 14:46* Creator: henry* Email: heneymark@* Description:分组*/public class Group {//分组名称private String mGroupName;//分组项目private List<GroupItem> mGroupItems;public Group(String GroupName, List<GroupItem> GroupItems) {this.mGroupName = GroupName;this.mGroupItems = GroupItems;}public String getGroupName() {return mGroupName;}public void setGroupName(String mGroupName) {this.mGroupName = mGroupName;}public List<GroupItem> getGroupItems() {return mGroupItems;}public void setGroupItems(List<GroupItem> mItems) {this.mGroupItems = mItems;}@Overridepublic String toString() {String string = "GroupName=" + mGroupName + ";GroupItem=" + mGroupItems.toString();return string;}}

package .friendlist.bean;/*** Date: /10/25. 14:47* Creator: henry* Email: heneymark@* Description: 组员描述*/public class GroupItem {private String Title;private String Content;public GroupItem(String mTitle, String mContent) {this.Title = mTitle;this.Content = mContent;}public String getTitle() {return Title;}public void setTitle(String title) {Title = title;}public String getContent() {return Content;}public void setContent(String content) {Content = content;}@Overridepublic String toString() {String string = "Title=" + Title + ";Content=" + Content;return string;}}

两个Item布局如下:

1.layout_group:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><RelativeLayoutandroid:id="@+id/group_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/darker_gray"android:padding="8dp"><ImageViewandroid:id="@+id/image"android:layout_width="23dp"android:layout_height="23dp"android:layout_marginLeft="10dp"android:src="@mipmap/icon_open"/><TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_toRightOf="@+id/image"android:layout_marginLeft="10dp"android:text="分组"android:textSize="16sp"android:gravity="center"/><TextViewandroid:id="@+id/count"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:text="5"android:textSize="14sp" /></RelativeLayout><android.support.v7.widget.RecyclerViewandroid:id="@+id/rl_group"android:layout_width="match_parent"android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView></LinearLayout>

2.item_group:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingLeft="10dp"android:paddingTop="8dp"android:text="title"android:textSize="18sp" /><TextViewandroid:id="@+id/content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingBottom="8dp"android:paddingLeft="10dp"android:paddingTop="8dp"android:text="content"android:textSize="14sp" /></LinearLayout>

两个适配器:GroupAdapter和GroupItemAdapter:

package .friendlist.adapter;import android.content.Context;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import java.util.List;import .friendlist.DividerItemDecoration;import .friendlist.R;import .friendlist.bean.Group;/*** Date: /10/25. 15:17* Creator: henry* Email: heneymark@* Description:*/public class GroupAdapter extends RecyclerView.Adapter<GroupAdapter.ViewHolder> {private List<Group> list;private Context mContext;private boolean isShowGroupItem = false;public GroupAdapter(Context context, List<Group> list) {this.list = list;mContext = context;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_group, parent, false);ViewHolder vh = new ViewHolder(view);return vh;}@Overridepublic void onBindViewHolder(final ViewHolder holder, int position) {holder.mName.setText(list.get(position).getGroupName());holder.mCount.setText(list.get(position).getGroupItems().size() + "");//创建默认的线性LayoutManagerLinearLayoutManager mLayoutManager = new LinearLayoutManager(mContext);//显示底部位置mLayoutManager.setStackFromEnd(true);holder.mGroup.setLayoutManager(mLayoutManager);//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能holder.mGroup.setHasFixedSize(true);GroupItemAdapter groupItemAdapter = new GroupItemAdapter(list.get(position).getGroupItems());//列表添加分割线holder.mGroup.addItemDecoration(new DividerItemDecoration(mContext, DividerItemDecoration.HORIZONTAL_LIST));holder.mGroup.setAdapter(groupItemAdapter);//初始化列表形式holder.mGroup.setVisibility(View.GONE);holder.mImg.setImageResource(R.mipmap.icon_open);isShowGroupItem = false;groupItemAdapter.addOnItemClickListener(new GroupItemAdapter.OnRecyclerItemClickListener() {@Overridepublic void onItemClick(View view, List data, int position) {Toast.makeText(mContext, "Item " + position + " Click!", Toast.LENGTH_LONG).show();}});//给分组添加Click事件holder.mGroupLayout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (!isShowGroupItem) {holder.mGroup.setVisibility(View.VISIBLE);holder.mImg.setImageResource(R.mipmap.icon_close);isShowGroupItem = true;} else {holder.mGroup.setVisibility(View.GONE);holder.mImg.setImageResource(R.mipmap.icon_open);isShowGroupItem = false;}}});}@Overridepublic int getItemCount() {return list.isEmpty() ? 0 : list.size();}public static class ViewHolder extends RecyclerView.ViewHolder {public TextView mName;public TextView mCount;public RecyclerView mGroup;public RelativeLayout mGroupLayout;public ImageView mImg;public ViewHolder(View view) {super(view);mName = (TextView) view.findViewById(R.id.name);mCount = (TextView) view.findViewById(R.id.count);mGroup = (RecyclerView) view.findViewById(R.id.rl_group);mGroupLayout = (RelativeLayout) view.findViewById(R.id.group_layout);mImg = (ImageView) view.findViewById(R.id.image);}}}

package .friendlist.adapter;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;import .friendlist.bean.GroupItem;import .friendlist.R;/*** Date: /10/25. 15:02* Creator: henry* Email: heneymark@* Description:*/public class GroupItemAdapter extends RecyclerView.Adapter<GroupItemAdapter.ViewHolder> implements View.OnClickListener {private List<GroupItem> list;private OnRecyclerItemClickListener mOnItemClickListener;public GroupItemAdapter(List<GroupItem> list) {this.list = list;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_group, parent, false);view.setOnClickListener(this);ViewHolder vh = new ViewHolder(view);return vh;}@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {holder.mTitle.setText(list.get(position).getTitle());holder.mContent.setText(list.get(position).getContent());holder.itemView.setTag(position);}@Overridepublic int getItemCount() {return list.isEmpty() ? 0 : list.size();}@Overridepublic void onClick(View view) {//使用getTag方法获取数据if (mOnItemClickListener != null)mOnItemClickListener.onItemClick(view, list, (Integer) view.getTag());}/*** item点击事件** @param listener*/public void addOnItemClickListener(OnRecyclerItemClickListener listener) {this.mOnItemClickListener = listener;}public static class ViewHolder extends RecyclerView.ViewHolder {public TextView mTitle;public TextView mContent;public ViewHolder(View view) {super(view);mTitle = (TextView) view.findViewById(R.id.title);mContent = (TextView) view.findViewById(R.id.content);}}public interface OnRecyclerItemClickListener {void onItemClick(View view, List data, int position);}}

值得注意的是,RecyclerView自身没有点击事件和分割线,需要直接添加,这里已经添加好了,当然这是我的方法,可能大神们还有更好的方法,还请大神分享。

代码地址:/detail/henry__mark/9667703;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。