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);
}
执行结果
实现划动删除
版权声明:本文为qq_44926213原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。