android 粘性view_Android实现Recycleview悬浮粘性头部外加右侧字母导航

公司项目要实现这个效果:Android实现Recycleview悬浮粘性头部外加右侧字母导航

图一是开始的画面,图二是滑动的画面,点击右侧字母需要滑动左侧到指定位置,然后左侧的顶部字母A,B等需要悬浮。

实现思路:

右侧的联动可以用recycyeview中adapter的scrollToPositionWithOffset方法实现。左侧就是recycleview,后台返回的城市数据是这种类型的:

{"returnCode":1,"returnMsg":"操作成功","data":[{"startWord":"A","trainCityList":[{"cityId":531,"cityName":"昂昂溪","code":null},{"cityId":2137,

我进行了一层封装

1.建立实体类用来封装下标和城市名字:

public class ContactModel {

private String index;

private String name;

public ContactModel(String name){

this.index = NewFirstLetterUtil.getFirstLetter(name);

this.name = name;

}

public String getIndex() {

return index;

}

public String getName() {

return name;

}

}

2.讲服务器返回的数据进行封装:

List contacts = new ArrayList<>();

for (int i=0;i

// ContactModel contactModel = new ContactModel(mTrainCityList.get(i).getCityName());

contacts.add(new ContactModel(mTrainCityList.get(i).getCityName()));

Collections.sort(contacts, new LetterComparator());

}

mContactModels.addAll(contacts);

mShowModels.addAll(mContactModels);

3.设置适配器

private void setNewAdapter() {

ContactsAdapter mAdapter = new ContactsAdapter(mShowModels);

mMainRecycleview.setLayoutManager(new LinearLayoutManager(this));

final StickyRecyclerHeadersDecoration headersDecor = new StickyRecyclerHeadersDecoration(mAdapter);

mMainRecycleview.addItemDecoration(headersDecor);

mAdapter.setOnItemClickListtener(new ContactsAdapter.OnItemClickListtener() {

@Override

public void onItemClick(int pos) {

// Toast.makeText(TrainNewStartActivity.this,"惦记的pos:"+pos+"数据:"+mShowModels.get(pos).getName(),Toast.LENGTH_SHORT).show();

Intent intent = new Intent();

intent.putExtra("data", mShowModels.get(pos).getName());

Log.d("lwp","data:"+mShowModels.get(pos).getName());

setResult(RESULT_OK, intent);

finish();

}

});

mMainRecycleview.setAdapter(mAdapter);

mMain_side_bar.setLazyRespond(false);

// 侧边设置相关

mMain_side_bar.setOnSelectIndexItemListener(new WaveSideBarView.OnSelectIndexItemListener() {

@Override

public void onSelectIndexItem(String letter) {

for (int i = 0; i< mContactModels.size(); i++) {

if (mContactModels.get(i).getIndex().equals(letter)) {

((LinearLayoutManager) mMainRecycleview.getLayoutManager()).scrollToPositionWithOffset(i, 0);

return;

}

}

}

});

}

4.适配器代码:

public class ContactsAdapter extends RecyclerView.Adapter implements StickyRecyclerHeadersAdapter {

private List contacts;

private static final String TAG = "ContactsAdapter";

private ContactModel contact;

public ContactsAdapter(List contacts) {

this.contacts = contacts;

}

@Override

public ContactsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

LayoutInflater inflater = LayoutInflater.from(parent.getContext());

View view = inflater.inflate(R.layout.layaout_item_contacts, null);

return new ContactsViewHolder(view);

}

@Override

public void onBindViewHolder(ContactsViewHolder holder, final int position) {

contact = contacts.get(position);

Log.e(TAG, "onBindViewHolder: index:" + contact.getIndex());

if (position == 0 || !contacts.get(position-1).getIndex().equals(contact.getIndex())) {

holder.tvIndex.setVisibility(View.GONE);

holder.tvIndex.setText(contact.getIndex());

} else {

holder.tvIndex.setVisibility(View.GONE);

}

holder.tvName.setText(contact.getName());

holder.tvName.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Log.d("lwp","惦记的pos:"+position);

onItemClickListtener.onItemClick(position);

}

});

}

public interface OnItemClickListtener{

void onItemClick(int pos);

}

public OnItemClickListtener onItemClickListtener;

public void setOnItemClickListtener(OnItemClickListtener onItemClickListtener) {

this.onItemClickListtener = onItemClickListt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值