1 ) Activity_Main.XML
2 ) Main Activity
Notes :
1 ) Manifest Permission
<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
Post a Comment