Simple Android RecyclerView example

前端 未结 11 1542
名媛妹妹
名媛妹妹 2020-11-22 02:03

I\'ve made a list of items a few times using Android\'s RecyclerView, but it is a rather complicated process. Going through one of the numerous tutorials online

11条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-22 02:36

    Start by adding recyclerview library.

    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    

    Create model class.

         public class UserModel implements Serializable {
    
        private String userName;
    
    
        public UserModel(String userName) {
            this.userName = userName;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
       }
    

    create adapter class.

    public class UsersAdapter extends RecyclerView.Adapter implements Filterable {
    
        private List userModelList;
        private List getUserModelListFiltered;
        private Context context;
        private SelectedUser selectedUser;
    
        public UsersAdapter(List userModelList,SelectedUser selectedUser) {
            this.userModelList = userModelList;
            this.getUserModelListFiltered = userModelList;
            this.selectedUser = selectedUser;
        }
    
        @NonNull
        @Override
        public UsersAdapter.UsersAdapterVh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            context = parent.getContext();
    
            return new UsersAdapterVh(LayoutInflater.from(context).inflate(R.layout.row_users,null));
        }
    
        @Override
        public void onBindViewHolder(@NonNull UsersAdapter.UsersAdapterVh holder, int position) {
    
            UserModel userModel = userModelList.get(position);
    
            String username = userModel.getUserName();
            String prefix = userModel.getUserName().substring(0,1);
    
            holder.tvUsername.setText(username);
            holder.tvPrefix.setText(prefix);
    
        }
    
        @Override
        public int getItemCount() {
            return userModelList.size();
        }
    
        @Override
        public Filter getFilter() {
    
            Filter filter = new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence charSequence) {
                    FilterResults filterResults = new FilterResults();
    
                    if(charSequence == null | charSequence.length() == 0){
                        filterResults.count = getUserModelListFiltered.size();
                        filterResults.values = getUserModelListFiltered;
    
                    }else{
                        String searchChr = charSequence.toString().toLowerCase();
    
                        List resultData = new ArrayList<>();
    
                        for(UserModel userModel: getUserModelListFiltered){
                            if(userModel.getUserName().toLowerCase().contains(searchChr)){
                                resultData.add(userModel);
                            }
                        }
                        filterResults.count = resultData.size();
                        filterResults.values = resultData;
    
                    }
    
                    return filterResults;
                }
    
                @Override
                protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
    
                    userModelList = (List) filterResults.values;
                    notifyDataSetChanged();
    
                }
            };
            return filter;
        }
    
    
        public interface SelectedUser{
    
            void selectedUser(UserModel userModel);
    
        }
    
        public class UsersAdapterVh extends RecyclerView.ViewHolder {
    
            TextView tvPrefix;
            TextView tvUsername;
            ImageView imIcon;
            public UsersAdapterVh(@NonNull View itemView) {
                super(itemView);
                tvPrefix = itemView.findViewById(R.id.prefix);
                tvUsername = itemView.findViewById(R.id.username);
                imIcon = itemView.findViewById(R.id.imageView);
    
                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        selectedUser.selectedUser(userModelList.get(getAdapterPosition()));
                    }
                });
    
    
            }
        }
    }
    

    create layout row_uses.xml

        
    
    
        
    
            
                
    
            
            
            
        
    
    
    

    Find recyclerview and populate data.

    Toolbar toolbar;
    RecyclerView recyclerView;
    
    List userModelList = new ArrayList<>();
    
    String[] names = {"Richard","Alice","Hannah","David"};
    
    UsersAdapter usersAdapter;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        recyclerView = findViewById(R.id.recyclerview);
        toolbar = findViewById(R.id.toolbar);
    
        this.setSupportActionBar(toolbar);
        this.getSupportActionBar().setTitle("");
    
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
    
        for(String s:names){
            UserModel userModel = new UserModel(s);
    
            userModelList.add(userModel);
        }
    
        usersAdapter = new UsersAdapter(userModelList,this);
    
        recyclerView.setAdapter(usersAdapter);
    
    }
    

    find full tutorial and source code here:

    Android RecyclerView

提交回复
热议问题