首先看效果图是否是想要的,样式是灵活的,可根据需求自己去改变!
1.接下里就开始进入正题
布局:
<?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"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/region_recy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="4" />
<!-- layoutManager:布局管理器 以上是以网格布局 spanCount:网格的数量 这里以四个为主
这只是从xml中设置 也可以从代码中设置-->
<!-- 阴影控件设置半透明-->
<TextView
android:id="@+id/txt_yinying"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_gravity="bottom"
android:background="#b3ffffff" />
</FrameLayout>
<!-- 展开更多,点击收起-->
<RelativeLayout
android:id="@+id/rl_openall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp">
<TextView
android:id="@+id/txt_open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#03A9F4"
android:gravity="center"
android:text="展开更多"
android:textColor="#FFEB3B"
android:textSize="14sp" />
</RelativeLayout>
</LinearLayout>
2.适配器中设置展开以及收起数据
package com.example.test;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class RegionAdapter extends RecyclerView.Adapter<RegionAdapter.ViewHolder> {
private Activity activity;
private List<String> list;
public RegionAdapter(Activity activity) {
this.activity = activity;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(activity).inflate(R.layout.rmsf_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.mRmsfname.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
//显示收起时数据
public void setHideList(List<String> newList) {
this.list = newList;
notifyDataSetChanged();
//刷新数据
}
//显示全部数据
public void setOpenList(List<String> openList) {
this.list = openList;
notifyDataSetChanged();
//刷新数据
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final TextView mRmsfname;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mRmsfname = itemView.findViewById(R.id.rmsf_name);
}
}
}
3.Adapter中的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">
<TextView
android:id="@+id/rmsf_name"
android:layout_width="50dp"
android:layout_height="50dp"
android:textSize="20dp" />
</LinearLayout>
4.代码中设置全部显示数据和收起显示数据
初始化:
private void init() {
recyclerView = findViewById(R.id.region_recy);
opentext = findViewById(R.id.rl_openall);
txtOpen = findViewById(R.id.txt_open);
txtYinying = findViewById(R.id.txt_yinying);
regionbeans = new ArrayList<>();
regionbeans.add("四川");
regionbeans.add("陕西");
regionbeans.add("北京");
regionbeans.add("广州");
regionbeans.add("澳门");
regionbeans.add("福建");
regionbeans.add("海口");
regionbeans.add("三亚");
regionbeans.add("黑龙江");
regionbeans.add("辽宁");
regionbeans.add("吉林");
regionbeans.add("天津");
regionbeans.add("新疆");
regionbeans.add("内蒙古");
regionbeans.add("甘肃");
regionbeans.add("宁夏");
regionbeans.add("青海");
regionbeans.add("西藏");
regionbeans.add("江苏");
regionbeans.add("安徽");
regionbeans.add("上海");
}
private void initData() {
List<String> mList = new ArrayList<>();
List<String> HideList = new ArrayList<>();
for (int i = 0; i < regionbeans.size(); i++) {
mList.add(regionbeans.get(i));
}
//收起显示的数据仅显示10条 这里的仅显示灵活变动
for (int i = 0; i < 10; i++) {
HideList.add(mList.get(i));
}
//适配器
mRegionAdapter = new RegionAdapter(this);
recyclerView.setAdapter(mRegionAdapter);
//默认设置收起时的数据
mRegionAdapter.setHideList(HideList);
opentext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (txtOpen.getText().toString().equals("展开更多")) {
txtOpen.setText("点击收起");
txtYinying.setVisibility(View.GONE);
mRegionAdapter.setOpenList(mList);
} else {
txtOpen.setText("展开更多");
txtYinying.setVisibility(View.VISIBLE);
mRegionAdapter.setHideList(HideList);
}
}
});
}