如何在没有任何外部库的情况下在android中实现字母部分RecyclerView?

时间:2016-09-09 10:34:57

标签: android android-recyclerview adapter

你好所有新的Android开发我试图使部分recyclerview标题像项目必须来到第一个charc我怎么能实现这一点到目前为止我已经完成了第三方库我现在喜欢自己做,请有人帮助我我在此之前尝试过如何做到这一点:

public class accountheader extends StatelessSection implements View.OnClickListener{
    private accountheader.OnItemClickListener onItemClickListener;

    String title;
    List<AccountModel> listobj;
    Context context;
    public accountheader(String title, List<AccountModel> list, Context context) {
        super(R.layout.section_ex1_header, R.layout.recyclerviewitem);
        this.title = title;
        this.listobj = list;
        this.context=context;
    }
    public void setOnItemClickListener(final accountheader.OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }


    @Override
    public int getContentItemsTotal() {
        return listobj.size();
    }

    @Override
    public RecyclerView.ViewHolder getItemViewHolder(View view) {
        return new ItemViewHolder(view);
    }



    @Override
    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, final int position) {
        final ItemViewHolder viewHolder = (ItemViewHolder) holder;
        TextView companyname=viewHolder.CompanyName;
        TextView companygroup=viewHolder.CompanyGroup;
        TextView acm=viewHolder.AccountManager;
        TextView companytype=viewHolder.CompanyType;
        ImageView caption=viewHolder.caption;
        viewHolder.click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(context, AccountView.class);
                int  name=listobj.get(position).getId();
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                Log.d("n",String.valueOf(name));
                context.startActivity(intent);
            }
        });
        companyname.setText(listobj.get(position).getCompanyName());
        companygroup.setText(listobj.get(position).getCompanyGroup());
        acm.setText(listobj.get(position).getAccountManagerText());
        ColorGenerator generator = ColorGenerator.DEFAULT;
        TextDrawable drawable = TextDrawable.builder()
                .buildRound((listobj.get(position).getCompanyName().substring(0,1)).toUpperCase(), generator.getRandomColor());
        viewHolder.caption.setImageDrawable(drawable);
  }

    @Override
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) {
        return new HeaderViewHolder(view);
    }

    @Override
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) {
        HeaderViewHolder headerHolder = (HeaderViewHolder) holder;

        headerHolder.tvTitle.setText(title);
    }

    @Override
    public void onClick(View v) {
        final RecyclerView recyclerView = (RecyclerView) v.getParent();
        int   position = recyclerView.getChildLayoutPosition(v);
        if (position != RecyclerView.NO_POSITION) {

            this.onItemClickListener.onItemClicked(position);
        }

    }


    public interface OnItemClickListener {
        void onItemClicked(int position);
    }
}
class HeaderViewHolder extends RecyclerView.ViewHolder {

     final TextView tvTitle;

    public HeaderViewHolder(View view) {
        super(view);

        tvTitle = (TextView) view.findViewById(R.id.tvTitle);
    }
}

class ItemViewHolder extends RecyclerView.ViewHolder {
     View click;
     TextView CompanyName;
     TextView CompanyGroup;
     TextView AccountManager;
     TextView CompanyType;
     ImageView caption;
     ItemViewHolder(View itemView) {
        super(itemView);
         click=itemView;
        CompanyName=(TextView)itemView.findViewById(R.id.header);
        CompanyGroup=(TextView)itemView.findViewById(R.id.middle);
        AccountManager=(TextView)itemView.findViewById(R.id.footer);
        CompanyType=(TextView)itemView.findViewById(R.id.status);
        caption=(ImageView)itemView.findViewById(R.id.imageView);

    }

}

这是我在活动中实施的方式:

  SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter();
        accountheader Accountheader=null;
        for(char alphabet = 'A'; alphabet <= 'Z';alphabet++) {
            List<AccountModel> contacts = getContactsWithLetter(alphabet,list);
            Accountheader=new accountheader(String.valueOf(alphabet), contacts,getApplicationContext());
            if (contacts.size() > 0) {
                sectionAdapter.addSection(Accountheader);
            }
        }
        recyclerView.setAdapter(sectionAdapter);

    private List<AccountModel> getContactsWithLetter(char letter,List<AccountModel>list) {
        List<AccountModel> contacts = new ArrayList<>();
        for (AccountModel accountModel:list) {
            if (accountModel.getCompanyGroup().charAt(0) == letter) {
                contacts.add(accountModel);
            }
        }
        return contacts;
    }

如果没有任何第三方图书馆,我怎样才能做到这一点,有人可以指导我:

0 个答案:

没有答案