发表于: 2018-10-10 22:59:25
2 908
一、今天完成的事情
重做了筛选菜单,因为之前的效果不好
主要思路:在FrameLayout中置入三个布局,最底层的RecyclerVIew负责显示数据,中间的View是一个半透明层,伴随筛选列表出现和消失,点击透明层可以关闭筛选列表,最上层RecyclerView负责显示四个筛选列表。
1.使用FrameLayout需要注意一个问题,比如说一个FrameLayout中有两层view,这两个view都能响应点击事件,当点击上层view时,下层view的点击事件也会被触发,这就是点击穿透,只要在上层view中设置
android:clickable="true"就能解决这个问题。
2.一般的教程中,RecyclerView的item的点击事件都是设置在Adapter里,但这样不太灵活,我们可以在Adapter中定义一个方法将接口暴露给外部使用。
定义接口和暴露方法:
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
SubMenu subMenu = subMenuList.get(position);
holder.contentTV.setText(subMenu.getContent());
if (mOnItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getLayoutPosition();
mOnItemClickListener.onItemClick(holder.itemView, position);
}
});
}
}
在外部使用
//为subMenuRV设置子项点击事件
subMenuAdapter.setOnItemClickListener(new MyOnItemClickListener() );
subMenuRV.setAdapter(subMenuAdapter);
public class MyOnItemClickListener implements SubMenuAdapter.OnItemClickListener {
@Overridepublic void onItemClick(View view, int position) {
......
3.今天还遇到一个问题,recyclerView只显示一行数据,查了半天才发现原来recyclerView子项的layout_width和layout_height都设为了match_parent,
android:layout_width="match_parent"
android:layout_height="match_parent">
因为这两个参数都是自动生成的,所以当时没注意。
二、明天计划的事情
解决一些bug,提交任务三
三、遇到的问题
四、收获
学会了在adapter外部设置recycler View子项的点击事件
评论