本文参考网址:https://www.jianshu.com/p/c4cfe38a91ed
本文是参考上述网址后,在上一篇博客(Android开发入门--微信小程序框架搭建)的基础上,选择了其中一个tab添加了一个recycleview功能。下面展示recycleview功能中的“展开与收缩”功能的核心代码。
ExpandCollapseActivity.java
public class ExpandCollapseActivity extends AppCompatActivity {
private static final String TAG = ExpandCollapseActivity.class.getSimpleName();
private List<String> mList = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.expandcollapse_activity);
initExpandCollapseData();
initView();
}
private void initExpandCollapseData() {
mList.add("Shake it off");
mList.add("Blank Space");
mList.add("Wanderland");
mList.add("Clean");
mList.add("Welcome to New York");
mList.add("You are in love");
mList.add("How you get the girl");
mList.add("New Romantics");
mList.add("Style");
mList.add("Out of the wood");
}
private void initView() {
ExpandCollapseAdapter adapter = new ExpandCollapseAdapter(this);
RecyclerView rcvExpandCollapse = findViewById(R.id.rcv_expandcollapse);
rcvExpandCollapse.setLayoutManager(new LinearLayoutManager(this));
rcvExpandCollapse.setHasFixedSize(true);
rcvExpandCollapse.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
rcvExpandCollapse.setAdapter(adapter);
adapter.setExpandCollapseDataList(mList);
}
}
ExpandCollapseAdapter.java
public class ExpandCollapseAdapter extends RecyclerView.Adapter<ExpandCollapseAdapter.ExpandCollapseViewHolder> {
private static final String TAG = ExpandCollapseAdapter.class.getSimpleName();
private Context mContext;
private List<String> mList = new ArrayList<>();
private int expandedPosition = -1;
private ExpandCollapseViewHolder mViewHolder;
public ExpandCollapseAdapter(Context context) {
mContext = context;
}
public void setExpandCollapseDataList(List<String> list) {
mList = list;
notifyDataSetChanged();
}
@NonNull
@Override
public ExpandCollapseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.expandcollapse_recycle_item, parent, false);
return new ExpandCollapseViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ExpandCollapseViewHolder holder, int position) {
holder.tvTeam.setText(mList.get(position));
holder.tvTeamChild.setText(mList.get(position) + " 所属专辑:1989");
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 mList == null ? 0 : mList.size();
}
public class ExpandCollapseViewHolder extends RecyclerView.ViewHolder {
RelativeLayout rlParent, rlChild;
TextView tvTeam, tvTeamChild;
public ExpandCollapseViewHolder(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);
}
}
}
效果图如下:
完整代码的gitee仓库地址:https://gitee.com/Viviv123/RecycleView