发表于: 2018-10-10 22:59:25

2 742


一、今天完成的事情

      重做了筛选菜单,因为之前的效果不好

      

     主要思路:在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 {

@Override

   public 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子项的点击事件



返回列表 返回列表
评论

    分享到