Skip to main content

Android Pagination Example

1 )  Activity_Main.XML


<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    android:id="@+id/frame_layout_folders_fragments"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nested_fragment_folders"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="@dimen/scale_10dp"
        android:scrollbars="none">
        <LinearLayout
            android:id="@+id/linear_fragment_folders_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <LinearLayout
                android:id="@+id/linear_fragment_folders"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/colorRecentsHeader"
                    android:gravity="center_vertical"
                    android:padding="@dimen/scale_7dp"
                    android:paddingBottom="@dimen/scale_10dp"
                    android:paddingLeft="@dimen/scale_10dp"
                    android:paddingStart="@dimen/scale_10dp"
                    android:text="@string/boxes"
                    android:textSize="@dimen/txt_18"
                    android:textStyle="bold"/>
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/recycler_folder_fragment_content_Main"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/scale_5dp"
                    android:layout_weight="1"
                    android:background="@android:color/transparent"
                    android:scrollbars="none"
                    android:nestedScrollingEnabled="false"
                    />
            </LinearLayout>
            <LinearLayout
                android:id="@+id/linear_fragment_folders_files"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:orientation="vertical">
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/activity_horizontal_margin"
                    android:background="@color/colorRecentsHeader"
                    android:gravity="center_vertical"
                    android:padding="@dimen/scale_7dp"
                    android:paddingBottom="@dimen/scale_10dp"
                    android:paddingLeft="@dimen/scale_10dp"
                    android:paddingStart="@dimen/scale_10dp"
                    android:text="@string/files"
                    android:textSize="@dimen/txt_18"
                    android:textStyle="bold"
                    />
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/recycler_fragment_folder_file_content_Main"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/scale_5dp"
                    android:layout_weight="1"
                    android:background="@android:color/transparent"
                    android:scrollbars="none"
                    android:nestedScrollingEnabled="false"
                    />
            </LinearLayout>
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="bottom"
        android:padding="10dp"
        android:layout_gravity="bottom"
        android:visibility="gone"
        />
</RelativeLayout>


2 ) Main Activity


public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView, mRecyclerview1;
    private static String url = "http://pratikbutani.x10.mx/json_data.json";//json
    private ProgressDialog pDialog;
    public Activity mActivity;
    private LinearLayoutManager mGridLayoutManager;
    private ContactAdapter ContactAdapter;
    private static final String TAG = "MainActivity";
    public ProgressBar progressBar;
    int cuurentItems, totalItems, scrollOutItems;
    private NestedScrollView nestedScrollView;
    public int totalItemsPerPage = 20;
    private LinearLayout linearLayout;
    private int nextFolder = 20, nextFile = 20;
    private int noOfItemsFolder = 0, noOfItemsFile = 0;
    private ArrayList subFileslist = new ArrayList<>();
    private ArrayList subFoldersList = new ArrayList<>();
    public ArrayList<ContactsModel> FilesList = new ArrayList<>();
    public ArrayList<ContactsModel> FoldersList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mActivity = this;
        nestedScrollView = findViewById(R.id.nested_fragment_folders);
        linearLayout = findViewById(R.id.linear_fragment_folders_files);
        mRecyclerView = findViewById(R.id.recycler_folder_fragment_content_Main);
        mRecyclerview1 = findViewById(R.id.recycler_fragment_folder_file_content_Main);
        progressBar = findViewById(R.id.progress_bar);
        if (isNetworkConnected()) {
            new GetContacts().execute();
        } else {
            Toast.makeText(mActivity, "Please check your internet", Toast.LENGTH_SHORT).show();
        }
    }
    public boolean isNetworkConnected() {
        ConnectivityManager cm = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
        assert cm != null;
        return cm.getActiveNetworkInfo() != null;
    }
    @SuppressLint("StaticFieldLeak")
    private class GetContacts extends AsyncTask<Void, Void, Void> {
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(mActivity);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();
        }
        public Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();
            String jsonStr = sh.makeServiceCall(url);
            Log.e("Response from url: ", jsonStr);
            if (jsonStr != null) {
                try {
                    for (int j = 0; j < 20; j++) {
                        ContactsModel contactsModel = new ContactsModel();
                        contactsModel.setId("01 " + j);
                        contactsModel.setName("Arpan" + j);
                        contactsModel.setAddress("Anand " + j);
                        contactsModel.setGender("Male " + j);
                        contactsModel.setEmail("ABC.com " + j);
                        FoldersList.add(contactsModel);
                    }
                    for (int j = 0; j < 20; j++) {
                        ContactsModel contactsModel = new ContactsModel();
                        contactsModel.setId("01 " + j);
                        contactsModel.setName("Bhavik " + j);
                        contactsModel.setAddress("Baroda " + j);
                        contactsModel.setGender("Female " + j);
                        contactsModel.setEmail("DEF.com " + j);
                        FilesList.add(contactsModel);
                    }
                    FoldersDataDao foldersDataDao=new FoldersDataDao();
                    foldersDataDao.saveFolderDetails(mActivity,FoldersList);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            if (FoldersList != null && FoldersList.size() > 0) {
//                Log.e("FoldersList.size",FoldersList.size()+"");
            }
            setAdapter();
        }
    }
    @SuppressLint("ShowToast")
    private void setAdapter() {
        try {
            ArrayList listFolder = new ArrayList<>();
            listFolder = new ArrayList<>(FoldersList.subList(0, totalItemsPerPage));
            ContactAdapter = new ContactAdapter(mActivity, listFolder);
            mGridLayoutManager = new LinearLayoutManager(mActivity);
            mRecyclerView.setHasFixedSize(true);
            mRecyclerView.setItemAnimator(new DefaultItemAnimator());
            mRecyclerView.setAdapter(ContactAdapter);
            mRecyclerView.setLayoutManager(mGridLayoutManager);
            linearLayout.setVisibility(View.INVISIBLE);
            nestedScrollView.setOnScrollChangeListener
                    ((NestedScrollView.OnScrollChangeListener)
                            (v, scrollX, scrollY, oldScrollX, oldScrollY) ->
                            {
                                if (v.getChildAt(v.getChildCount() - 1) != null) {
                                    if ((scrollY >= (v.getChildAt(v.getChildCount() - 1).getMeasuredHeight()
                                            - v.getMeasuredHeight())) && scrollY > oldScrollY) {
                                        scrollOutItems = mGridLayoutManager.findLastCompletelyVisibleItemPosition();
                                        totalItems = mGridLayoutManager.getItemCount();
                                        cuurentItems = mGridLayoutManager.getChildCount();
                                        progressBar.setVisibility(View.VISIBLE);
                                        new Handler().postDelayed(new Runnable() {
                                            @SuppressLint("LongLogTag")
                                            @Override
                                            public void run() {
                                                try {
                                                    noOfItemsFolder = totalItems + nextFolder;
                                                    if (subFoldersList.size() != FoldersList.size()) {
                                                        if (noOfItemsFolder < FoldersList.size()) {
                                                            mGridLayoutManager = new LinearLayoutManager(mActivity);
                                                            mGridLayoutManager.setStackFromEnd(true);
                                                            subFoldersList = new ArrayList(FoldersList.subList(0, noOfItemsFolder));
                                                            ContactAdapter = new ContactAdapter(mActivity, subFoldersList);
                                                            mRecyclerView.setHasFixedSize(true);
                                                            mRecyclerView.setItemAnimator(new DefaultItemAnimator());
                                                            mRecyclerView.setAdapter(ContactAdapter);
                                                            mRecyclerView.setLayoutManager(mGridLayoutManager);
                                                            ContactAdapter.notifyDataSetChanged();
                                                            progressBar.setVisibility(View.GONE);
                                                        } else if (noOfItemsFolder > FoldersList.size()) {
                                                            int reminingItems = FoldersList.size() - subFoldersList.size();
                                                            mGridLayoutManager = new LinearLayoutManager(mActivity);
                                                            mGridLayoutManager.setStackFromEnd(true);
                                                            subFoldersList = new ArrayList(FoldersList.subList(0, subFoldersList.size() + reminingItems));
                                                            ContactAdapter = new ContactAdapter(mActivity, subFoldersList);
                                                            mRecyclerView.setHasFixedSize(true);
                                                            mRecyclerView.setItemAnimator(new DefaultItemAnimator());
                                                            mRecyclerView.setAdapter(ContactAdapter);
                                                            mRecyclerView.setLayoutManager(mGridLayoutManager);
                                                            ContactAdapter.notifyDataSetChanged();
                                                            progressBar.setVisibility(View.GONE);
                                                        }
                                                    } else if (subFoldersList.size() == FoldersList.size()) {
                                                        fetchNewData();
                                                    }
                                                } catch (Exception e)
                                                {
                                                    Log.d("Error",e.getMessage());
                                                }
                                            }
                                        }, 1000);
                                    }
                                }
                            });
        } catch (Exception exception) {
            Toast.makeText(mActivity, "Error" + exception, Toast.LENGTH_LONG);
        }
    }
    private void fetchNewData()
    {
        progressBar.setVisibility(View.VISIBLE);
        linearLayout.setVisibility(View.VISIBLE);
        new Handler().postDelayed(new Runnable() {
            @SuppressLint("LongLogTag")
            @Override
            public void run() {
                noOfItemsFile = subFileslist.size() + nextFile;
                Log.d("Sizze  of noOfItems Files", String.valueOf(noOfItemsFile));
                if (subFileslist.size() != FilesList.size()) {
                    if (noOfItemsFile < FilesList.size()) {
                        mGridLayoutManager = new LinearLayoutManager(mActivity);
                        mGridLayoutManager.setStackFromEnd(true);
                        subFileslist = new ArrayList(FilesList.subList(0, noOfItemsFile));
                        ContactAdapter = new ContactAdapter(mActivity, subFileslist);
                        mRecyclerview1.setHasFixedSize(true);
                        mRecyclerview1.setItemAnimator(new DefaultItemAnimator());
                        mRecyclerview1.setAdapter(ContactAdapter);
                        mRecyclerview1.setLayoutManager(mGridLayoutManager);
                        ContactAdapter.notifyDataSetChanged();
                        progressBar.setVisibility(View.GONE);
                    } else if (noOfItemsFile > FilesList.size()) {
                        int reminingItems = FilesList.size() - subFileslist.size();
                        mGridLayoutManager = new LinearLayoutManager(mActivity);
                        mGridLayoutManager.setStackFromEnd(true);
                        subFileslist = new ArrayList(FilesList.subList(0, subFileslist.size() + reminingItems));
                        ContactAdapter = new ContactAdapter(mActivity, subFileslist);
                        mRecyclerview1.setHasFixedSize(true);
                        mRecyclerview1.setItemAnimator(new DefaultItemAnimator());
                        mRecyclerview1.setAdapter(ContactAdapter);
                        mRecyclerview1.setLayoutManager(mGridLayoutManager);
                        ContactAdapter.notifyDataSetChanged();
                        progressBar.setVisibility(View.GONE);
                    }
                } else if (subFileslist.size() == FilesList.size()) {
                    progressBar.setVisibility(View.GONE);
                }
            }
        }, 1000);
    }
}



Notes :
1 ) Manifest Permission
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
2 ) Required Gradle
compile 'com.android.support:appcompat-v7:27.1.1'
compile 'com.android.support:design:27.1.1'
compile 'com.android.support:support-v4:27.1.1'
compile 'com.android.support:recyclerview-v7:27.1.1'

Comments

Popular posts from this blog

Post data with retrofit

1 ) Retrofit Client Class public class RetrofitClient { private static final String AUTH = "Basic " + Base64. encodeToString (( "belalkhan:123456" ).getBytes(), Base64. NO_WRAP ); private static final String BASE_URL = "http://simplifiedlabs.xyz/MyApi/public/" ; private static RetrofitClient mInstance ; private Retrofit retrofit ; private RetrofitClient() { OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor( new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request original = chain.request(); Request.Builder requestBuilder = original.newBuilder() .addHeader( "Authorization" , AUTH ) .meth...

Android MVVM (Model View ViewModel) Design Pattern

DataBinding Pdf Link:-   https://drive.google.com/open?id=1uL0xK9EktcEWOke5vqUqp-rgqpA1ARR3 DataBinding References : -  https://www.youtube.com/watch?v=v4XO_y3RErI Steps for applying MVVM design pattern to Android Project  1 ) Applying the changes in build.gradle (App Level) file      android {     compileSdkVersion 27     defaultConfig {         applicationId "com.credencys.databindingwithrecyclerview"         minSdkVersion 15         targetSdkVersion 27         versionCode 1         versionName "1.0"         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"     }     buildTypes {         release {             minifyEnabled false             proguardFiles ge...

Complex Retrofit Class With Database

URL:-  http://www.mocky.io/v2/ 5b936d6f33000011002061d3 1 )   Create   RetrofitClient(Base URL Class) import retrofit2.GsonConverterFactory; import retrofit2.Retrofit; public class RetrofitClient { //http://www.mocky.io/v2/5b936d6f33000011002061d3 public static final String API_BASE_URL = "http://www.mocky.io/v2/" ; public static Retrofit retrofit = null ; public static Retrofit getApiClient() { if ( retrofit == null ) { retrofit = new Retrofit.Builder().baseUrl( API_BASE_URL ).addConverterFactory(GsonConverterFactory . create ()).build(); } return retrofit ; } } 2 ) Create Retrofit ApiInterface Class(End URL Class) import com.example.discusit.complexretrofitdemo.model.Data; import retrofit2.Call; import retrofit2.http. GET ; public interface ApiInterface { @GET ( "5b936d6f33000011002061d3" ) Call<Data> getData(); } 3 ) Create Require Model Clas...