Skip to main content

Recyclerview with search functionality

1 ) Menu.XML

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/folders_button_menu_search"
        android:icon="@drawable/search_icon"
        android:background="@color/raw_color"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always|collapseActionView"/>
</menu>


2 )  Main Activity
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,
                   Bundle savedInstanceState) {
   mActivity = getActivity();
   mView = inflater.inflate(R.layout.fragment_shared, container, false);
   setHasOptionsMenu(true);
   return mView;
}

    /*          Initialization Of Menu     */   @Override   public void onPrepareOptionsMenu(Menu menu) {
      menu.clear();
      mActivity.getMenuInflater().inflate(R.menu.menu_green_box_folders_dashboard, menu);
      MenuItem menuSearch = menu.findItem(R.id.folders_button_menu_search).setVisible(true);
      MenuItem menuGrid=menu.findItem(R.id.folders_button_menu_grid).setVisible(false);
      MenuItem menuSort=menu.findItem(R.id.folders_button_menu_sort).setVisible(false);
      SearchView mSearchView = (SearchView) MenuItemCompat.getActionView(menuSearch);
      search(mSearchView, menuSearch);
   }
   /*   This Method Will Apply Search Funcnality    */   private void search(SearchView searchView, final MenuItem menuSearch)
   {
      searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
      {
         @Override         public boolean onQueryTextSubmit(String query) {
            return false;
         }

         @Override         public boolean onQueryTextChange(String newText)
         {
            final List<SharedFoldersModel> mFolderListModels = filterFolder(mArrSharedFoldersModel, newText);
            sharedFoldersTagMainAdapter.setFilter(mFolderListModels);

            final List<SharedFilesModel> mFileListModel = filterFile(mArrSharedFilesModel, newText);
            sharedFilesTagMainAdapter.setFilter(mFileListModel);

            return true;
         }
      });
   }
      /*        This Method Will Search Data Of Folders         */   private List<SharedFoldersModel> filterFolder(List<SharedFoldersModel> models, String query)
   {
      query = query.toLowerCase();
      final List<SharedFoldersModel> filteredModelList = new ArrayList<>();

      for (SharedFoldersModel model : models) {
//       String mFoldersOwnerName = model.getSharedOn().toLowerCase();         String mFoldersName = model.getName().toLowerCase();

         if (query != null)
         {
            if (mFoldersName.contains(query)) {
               filteredModelList.add(model);
            }
            if (filteredModelList.size() == 0) {
               mRelativeNoRecordsFolders.setVisibility(View.VISIBLE);
               mRecyclerViewFolder.setVisibility(View.GONE);
            } else {
               mRelativeNoRecordsFolders.setVisibility(View.GONE);
               mRecyclerViewFolder.setVisibility(View.VISIBLE);
            }
         }
      }
      return filteredModelList;
   }

   private List<SharedFoldersModel> filterFolderStatus(List<SharedFoldersModel> models, String status)
   {
      final List<SharedFoldersModel> filteredModelList = new ArrayList<>();
      for (SharedFoldersModel model : models) {
         String mFoldersName = model.getName();

         Common.insertLog("Folder Name:::> " + mFoldersName);

         if (mFoldersName.equalsIgnoreCase(mActivity.getResources().getString(R.string.str_null))) {
            mFoldersName = mActivity.getResources().getString(R.string.menu_pending);
         }
         if (status != null) {
            if (mFoldersName.equalsIgnoreCase(status)) {
               filteredModelList.add(model);
            }
         }
         if (filteredModelList.size() == 0) {
            mRelativeNoRecordsFolders.setVisibility(View.VISIBLE);
            mRecyclerViewFolder.setVisibility(View.GONE);
         } else {
            mRelativeNoRecordsFolders.setVisibility(View.GONE);
            mRecyclerViewFolder.setVisibility(View.VISIBLE);
         }
      }
      return filteredModelList;
   }

3 ) Adapter Class
@Overridepublic int getItemViewType(int position) {
    return mArrSharedFoldersModel.get(position) != null ? mViewItem : 0;
}
@Overridepublic int getItemCount() {
    return mArrSharedFoldersModel.size();
}

public void setFilter(List<SharedFoldersModel> mSharedFoldersModel)
{
    mArrSharedFoldersModel = new ArrayList<>();
    mArrSharedFoldersModel.addAll(mSharedFoldersModel);
    notifyDataSetChanged();
}

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...