RecyclerView is major used in building any awesome app. In my last article I have discussed about the swipe and delete item of recyclerView. If you have n't seen then Please check here Swipe to delete item of recyclerview.
RecyclerView provides better in term of scrolling any complex items. Now days people are using very complex layout and design of long list. And very difficult to scroll to find a particular item while scrolling. To over come this issue RecyclerView provides the fast scroll. You can find item very easy while scrolling.
Here in this article I am sharing one awesome library that helps you to make this in very simple way.
He made our life very easy and simple. Please give full credit to original author. Here is the Github link. So lets implement this library in our simple project. Before proceed please check this video that helps you what are going to implements.
Lets create an android project RecyclerView Fast scroll. Here is added all my dependencies.
RecyclerView provides better in term of scrolling any complex items. Now days people are using very complex layout and design of long list. And very difficult to scroll to find a particular item while scrolling. To over come this issue RecyclerView provides the fast scroll. You can find item very easy while scrolling.
Here in this article I am sharing one awesome library that helps you to make this in very simple way.
He made our life very easy and simple. Please give full credit to original author. Here is the Github link. So lets implement this library in our simple project. Before proceed please check this video that helps you what are going to implements.
Lets create an android project RecyclerView Fast scroll. Here is added all my dependencies.
build.gradle app level
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.sunil.recyclerviewfastscroll"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.0'
testCompile 'junit:junit:4.12'
compile 'com.android.support:recyclerview-v7:25.0.0'
compile 'com.android.support:cardview-v7:25.0.0'
compile 'com.android.support:design:25.0.0'
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'de.hdodenhof:circleimageview:2.0.0'
compile 'com.simplecityapps:recyclerview-fastscroll:1.0.11'
}
ItemModel.java
public class ItemModel {
private String name;
private String imagePath;
public ItemModel(){
}
public ItemModel(String name, String imagePath) {
this.name = name;
this.imagePath = imagePath;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImagePath() {
return imagePath;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
}
ItemModel.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity {
private final static String TAG = MainActivity.class.getSimpleName();
private String[] names = Constant.name;
private String[] images = Constant.image;
private RecyclerItemAdapter mAdapter;
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initView();
}
private void initView() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
ListlistItems = getList();
mAdapter = new RecyclerItemAdapter(this, listItems);
recyclerView.setAdapter(mAdapter);
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
}
private ListgetList(){
Listlist = new ArrayList<>();
for (int index =0; index < names.length; index++){
ItemModel itemModel = new ItemModel();
itemModel.setName(names[index]);
itemModel.setImagePath(images[index]);
list.add(itemModel);
}
if (list.size() > 0) {
Collections.sort(list, new Comparator() {
@Override
public int compare(final ItemModel object1, final ItemModel object2) {
return object1.getName().compareTo(object2.getName());
}
});
}
return list;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.sunil.recyclerviewfastscroll.MainActivity">
<com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:fastScrollPopupBgColor="@color/colorAccent"
app:fastScrollPopupTextColor="@android:color/primary_text_dark"
app:fastScrollThumbColor="@color/colorAccent">
</com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView>
<</RelativeLayout>
RecyclerItemAdapter.java
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by sunil on 12/3/16.
*/
public class RecyclerItemAdapter extends RecyclerView.Adapterimplements FastScrollRecyclerView.SectionedAdapter {
private ListitemModels;
private Context context;
public RecyclerItemAdapter(Context context, ListwallTalls) {
this.itemModels = wallTalls;
this.context = context;
}
@Override
public int getItemCount() {
return itemModels.size();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_layout, viewGroup, false);
return new ItemViewHolder(itemView);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ItemModel model = itemModels.get(position);
initializeViews(model, holder, position);
}
private void initializeViews(ItemModel model, final RecyclerView.ViewHolder holder, int position) {
String imageUrl = model.getImagePath();
if (imageUrl != null && !imageUrl.isEmpty()){
Glide.with(context)
.load(imageUrl)
.into(((ItemViewHolder)holder).imageView);
}
((ItemViewHolder)holder).name.setText(model.getName());
}
@NonNull
@Override
public String getSectionName(int position) {
return Character.toString(itemModels.get(position).getName().charAt(0));
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.name)
TextView name;
@BindView(R.id.imageView)
ImageView imageView;
public ItemViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<de.hdodenhof.circleimageview.CircleImageView
android:src="@mipmap/ic_launcher"
android:id="@+id/imageView"
android:layout_width="70dp"
android:layout_height="70dp" />
<TextView
android:id="@+id/name"
android:text="name"
android:textStyle="bold"
android:layout_alignBaseline="@id/imageView"
android:layout_margin="10dp"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_toRightOf="@+id/imageView"/>
</RelativeLayout>
Here is the snap shot.
Thanks for reading this post. I hope this post will help you to understand.






















