anchoredHeaderString字符

./java/com/android/dialer/contactsfragment/res/layout/fragment_contacts.xml---整体
./java/com/android/dialer/contactsfragment/res/layout/add_contact_row.xml ---图标和创建联系人文本
./java/com/android/dialer/contactsfragment/res/layout/contact_row.xml ---图标和电话号码
./java/com/android/dialer/contactsfragment/res/layout/header.xml ----A/B/C
./java/com/android/dialer/contactsfragment/FastScroller.java----滑动滚动条

创建联系人文本和电话号码使用同一ID
click_target
一张图看清现状:
在这里插入图片描述修改的一个问题
前提条件:手机有存SIM与手机联系人
操作步骤: 拨号盘–联系人–查看该界面
实际结果: 上下导航键移动查看,上移发现新建联系人 与字母A并排
期望结果: 上下移动导航键 新建联系人 在字母A的上方
追踪代码:

alps/vendor/mediatek/proprietary/packages/apps/Dialer/java/com/android/dialer/contactsfragment/ContactsFragment.java		
/*
   * When our recycler view updates, we need to ensure that our row headers and anchored header
   * are in the correct state.
   *
   * The general rule is, when the row headers are shown, our anchored header is hidden. When the
   * recycler view is scrolling through a sublist that has more than one element, we want to show
   * out anchored header, to create the illusion that our row header has been anchored. In all
   * other situations, we want to hide the anchor because that means we are transitioning between
   * two sublists.
   */
  @Override
  public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
    fastScroller.updateContainerAndScrollBarPosition(recyclerView);
    int firstVisibleItem = manager.findFirstVisibleItemPosition();
    int firstCompletelyVisible = manager.findFirstCompletelyVisibleItemPosition();
    if (firstCompletelyVisible == RecyclerView.NO_POSITION) {
      // No items are visible, so there are no headers to update.
      return;
    }
    String anchoredHeaderString = adapter.getHeaderString(firstCompletelyVisible);

    // If the user swipes to the top of the list very quickly, there is some strange behavior
    // between this method updating headers and adapter#onBindViewHolder updating headers.
    // To overcome this, we refresh the headers to ensure they are correct.
    if (firstVisibleItem == firstCompletelyVisible && firstVisibleItem == 0) {
      adapter.refreshHeaders();
      anchoredHeader.setVisibility(View.INVISIBLE);
    } else if (firstVisibleItem != 0) { // skip the add contact row
      if (adapter.getHeaderString(firstVisibleItem).equals(anchoredHeaderString)) {
        anchoredHeader.setText(anchoredHeaderString);
        //anchoredHeader.setVisibility(View.VISIBLE);//-----A
        //getContactHolder(firstVisibleItem).getHeaderView().setVisibility(View.INVISIBLE);
        //getContactHolder(firstCompletelyVisible).getHeaderView().setVisibility(View.INVISIBLE);
      } else {
        anchoredHeader.setVisibility(View.INVISIBLE);
        //getContactHolder(firstVisibleItem).getHeaderView().setVisibility(View.VISIBLE);
        //getContactHolder(firstCompletelyVisible).getHeaderView().setVisibility(View.VISIBLE);
      }
    }
  }

findFirstVisibleItemPosition() 返回当前RecycelrView中第一个可见的item的adapter postion
findLastVisibleItemPosition() 返回当前RecycelrView中最后一个可见的item的adapter postion
findFirstCompletelyVisibleItemPosition() 返回当前RecycelrView中第一个完整可见的item的adapter postion
findLastCompletelyVisibleItemPosition() 返回当前RecycelrView中最后一个完整可见的item的adapter postion

根据源码,其实是默认设计如此,无需修改,如果非要修改,就只能参考上面的修改了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值