AndroidStudio类微信界面+RecycleView

AndroidStudio类微信界面+RecycleView

(上次地址)Android Studio类微信界面实现-MyWechart

1、 修改后的tab01.xml

添加recycleview控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rcv_swipe"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:overScrollMode="never"
        android:scrollbars="none"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</LinearLayout>

2、添加iteam.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">

    <include layout="@layout/include_item" />

    <TextView
        android:id="@+id/tv_team"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="@string/app_name" />
</LinearLayout>

在这里插入图片描述

3.item_expend.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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_margin="5dp"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/rl_parent"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#3F51B5">

        <TextView
            android:id="@+id/tv_team"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:textColor="@android:color/white"
            tools:text="主布局" />

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rl_child"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#00BCD4"
        android:visibility="gone">

        <TextView
            android:id="@+id/tv_team_child"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:textColor="@android:color/secondary_text_light"
            tools:text="副布局" />

    </RelativeLayout>

</LinearLayout>

在这里插入图片描述

4、item_swip.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="50dp"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_margin="8dp"
    android:background="@drawable/common_bg"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="8dp"
        tools:text="内容" />

</LinearLayout>

在这里插入图片描述

5、include_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/tv_sticky_header_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#3F51B5"
    android:padding="10dp"
    android:textColor="@android:color/secondary_text_light"
    android:textSize="14sp"
    tools:text="@string/app_name" />

在这里插入图片描述

添加Java文件

1、adapter.java

package com.example.mywechart;

import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class adapter extends RecyclerView.Adapter<adapter.myviewholder> {

    private List<StickyData>list;
    private Context context;
    private View inflater;

    public static final int FIRST_STICKY_VIEW = 1;
    public static final int HAS_STICKY_VIEW = 2;
    public static final int NONE_STICKY_VIEW = 3;

    public adapter(Context context,List<StickyData>list) {
        this.context=context;
        this.list=list;
    }

    @Override
    public myviewholder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        inflater= LayoutInflater.from(context).inflate(R.layout.item,viewGroup,false);
        myviewholder myviewholder=new myviewholder(inflater);
        return myviewholder;
    }

    @Override
    public void onBindViewHolder(myviewholder myviewholder, int position) {

        StickyData stickyData=list.get(position);
        myviewholder.tvTeam.setText(stickyData.getTeam());

        if (position == 0) {
            myviewholder.tvArea.setVisibility(View.VISIBLE);
            myviewholder.tvArea.setText(stickyData.area);
            myviewholder.itemView.setTag(FIRST_STICKY_VIEW);
        } else {
            if (!TextUtils.equals(stickyData.area, list.get(position - 1).area)) {
                myviewholder.tvArea.setVisibility(View.VISIBLE);
                myviewholder.tvArea.setText(stickyData.area);
                myviewholder.itemView.setTag(HAS_STICKY_VIEW);
            } else {
                myviewholder.tvArea.setVisibility(View.GONE);
                myviewholder.itemView.setTag(NONE_STICKY_VIEW);
            }
        }
        myviewholder.itemView.setContentDescription(stickyData.area);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class myviewholder extends RecyclerView.ViewHolder{
        TextView tvArea,tvTeam;
        public myviewholder(View itemView) {
            super(itemView);
            tvArea=itemView.findViewById(R.id.tv_sticky_header_view);
            tvTeam = itemView.findViewById(R.id.tv_team);
        }
    }
}

2、adapter_expend.java

package com.example.mywechart;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class adapter_expand extends RecyclerView.Adapter<adapter_expand.expandviewholder> {

    private List<String>list;
    private Context context;
    private View inflater;

    private int expandedPosition = -1;
    private expandviewholder mViewHolder;

    public adapter_expand(Context context, List<String> list) {
        this.context=context;
        this.list=list;
    }

    @Override
    public expandviewholder onCreateViewHolder(ViewGroup parent, int viewType) {
        inflater= LayoutInflater.from(context).inflate(R.layout.item_expand,parent,false);
        expandviewholder expandviewholder=new expandviewholder(inflater);
        return expandviewholder;
    }

    @Override
    public void onBindViewHolder(final expandviewholder holder, int position) {
        holder.tvTeam.setText(list.get(position));
        holder.tvTeamChild.setText(list.get(position) + "的联系方式");

        final boolean isExpanded = position == expandedPosition;
        holder.rlChild.setVisibility(isExpanded ? View.VISIBLE : View.GONE);
        holder.rlParent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mViewHolder != null) {
                    mViewHolder.rlChild.setVisibility(View.GONE);
                    notifyItemChanged(expandedPosition);
                }
                expandedPosition = isExpanded ? -1 : holder.getAdapterPosition();
                mViewHolder = isExpanded ? null : holder;
                notifyItemChanged(holder.getAdapterPosition());
            }
        });
    }

    @Override
    public int getItemCount() { return list.size();}

    class expandviewholder extends RecyclerView.ViewHolder{
        RelativeLayout rlParent, rlChild;
        TextView tvTeam, tvTeamChild;
        public expandviewholder(View itemView) {
            super(itemView);
            rlParent = itemView.findViewById(R.id.rl_parent);
            rlChild = itemView.findViewById(R.id.rl_child);
            tvTeam = itemView.findViewById(R.id.tv_team);
            tvTeamChild = itemView.findViewById(R.id.tv_team_child);
        }
    }
}

3、adapter_wisp.java

package com.example.mywechart;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class adapter_swipe extends RecyclerView.Adapter<adapter_swipe.swipeviewholder> implements ItemTouchHelperListener{

    private List<String>list;
    private Context context;
    private View inflater;

    public adapter_swipe(Context context, List<String> list) {
        this.context=context;
        this.list=list;
    }

    @Override
    public swipeviewholder onCreateViewHolder(ViewGroup parent, int viewType) {
        inflater= LayoutInflater.from(context).inflate(R.layout.item_swipe,parent,false);
        swipeviewholder swipeviewholder=new swipeviewholder(inflater);
        return swipeviewholder;
    }

    @Override
    public void onBindViewHolder(swipeviewholder holder, int position) {


        holder.tvContent.setText(list.get(position));
    }

    @Override
    public int getItemCount() {return list.size();}

    @Override
    public void onItemDismiss(int position) {
        if (position < 0 || position > getItemCount()) {
            return;
        }

        list.remove(position);
        notifyItemRemoved(position);

        // 解决 RecyclerView 删除 Item 导致位置错乱的问题
        if (position != list.size()) {
            notifyItemRangeChanged(position, list.size() - position);
        }
    }

    public class swipeviewholder extends RecyclerView.ViewHolder{
        TextView tvContent;

        public swipeviewholder(View itemView) {
            super(itemView);
            tvContent = itemView.findViewById(R.id.tv_content);
        }
    }
}

4、StickyData.java

package com.example.mywechart;

public class StickyData {
    public String area;

    public String team;

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    public String getTeam() {
        return team;
    }

    public void setTeam(String team) {
        this.team = team;
    }
}

5、修改后的weixinFragment.java

package com.example.mywechart;

        import android.content.Context;
        import android.os.Bundle;

        import android.app.Fragment;

        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;

        import androidx.appcompat.app.AppCompatActivity;
        import androidx.recyclerview.widget.ItemTouchHelper;
        import androidx.recyclerview.widget.LinearLayoutManager;
        import androidx.recyclerview.widget.RecyclerView;

        import java.util.ArrayList;
        import java.util.List;


public class weixinFragment extends Fragment {



    private RecyclerView recyclerView;
    private List<String> mList = new ArrayList<>();
    private Context context;
    private adapter_swipe adapter;

    public weixinFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view= inflater.inflate(R.layout.tab01, container, false);

        recyclerView=view.findViewById(R.id.rcv_swipe);
        initData();
        initView();

        return view;
    }

    private void initData() {
        mList.add("Never Gonna Give You UP");
        mList.add("Scared To Be Lonely");
        mList.add("Once Upon a Time");
        mList.add("Ham");
        mList.add("How To Love");
        mList.add("In The Name Of Love");
        mList.add("Bloom");
        mList.add("Ghost");
        mList.add("Rather Be");
        mList.add("Wake Up");
        mList.add("Play With Fire");
        mList.add("The Cure");
        mList.add("Where Is You Love");
        mList.add("Changing");
        mList.add("Come and Get You Love");
        mList.add("Money Run Low");
        mList.add("Radioactive In The Dark");
        mList.add("Come Back To You");
        mList.add("The Heat");
        mList.add("There For You");
        mList.add("Here with You");
        mList.add("Wannabe");
        mList.add("Flowers");
        mList.add("Suck for You");
        mList.add("Take a Walk");
        mList.add("Shots");
        mList.add("Meant To Be");
        mList.add("Ferrari");
        mList.add("Hey Mamma");
        mList.add("Hands in the Fire");
    }

    private void initView(){
        context=this.getActivity();
        adapter=new adapter_swipe(context,mList);

        ItemTouchHelper.Callback callback = new SwipeItemTouchHelper(adapter);
        ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
        touchHelper.attachToRecyclerView(recyclerView);

        LinearLayoutManager manager=new LinearLayoutManager(context);
        manager.setOrientation(LinearLayoutManager.VERTICAL);

        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(manager);
        recyclerView.setHasFixedSize(true);
    }


}

6、ItemTouchHelperListener

package com.example.mywechart;

public interface ItemTouchHelperListener {
    void onItemDismiss(int position);
}

执行结果

实现划动删除

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述GitHub代码链接


版权声明:本文为qq_44926213原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。