diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 3294dfb..f0cdb84 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser
index c7d6dfe..ac3b984 100644
Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 703e5d4..af0bbdd 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/README.md b/README.md
index 47a31de..a034d33 100644
--- a/README.md
+++ b/README.md
@@ -75,3 +75,88 @@ Step 4. Add custom style in your styles.xml
+# Use with pagination
+
+Step 1. Inside JAVA
+
+ public class MainActivityPaged extends AppCompatActivity {
+
+ ArrayList mItems = new ArrayList<>();
+ SpinnerDialogPaged mSpinnerDialogPaged;
+ TextView mSelectedItems;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ mSelectedItems = findViewById(R.id.txt);
+
+ mSpinnerDialogPaged = new SpinnerDialogPaged(MainActivityPaged.this, mItems,
+ "Select");
+
+ mSpinnerDialogPaged.setCancellable(true); // for cancellable
+ mSpinnerDialogPaged.setShowKeyboard(false); // for open keyboard by default
+ mSpinnerDialogPaged.setVisibleThreshold(3); // set visible threshold
+ mSpinnerDialogPaged.setHideSearchField(true); // hide or show search field with true of false
+
+ getUsers(1); // make your request for api
+
+ findViewById(R.id.show).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mSpinnerDialogPaged.showSpinerDialog();
+ }
+ });
+
+
+ mSpinnerDialogPaged.bindOnLoadMoreListener(new OnLoadMoreListener() {
+ @Override
+ public void onLoadMore(int page) {
+ getUsers(page); // make your request for api with the new page returned
+ }
+ });
+
+ mSpinnerDialogPaged.bindOnAfterTextChanged(new OnAfterTextChangedListener() {
+ @Override
+ public void onAfterTextChanged(String term) {
+ // get the search term
+ }
+ });
+
+ }
+
+ private void getUsers(int page) {
+ mSpinnerDialogPaged.showProgressBar(); // show the progress bar before your request
+
+ RetrofitConfig.createService(UserService.class).getUsers(page).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, retrofit2.Response response) {
+ if (response.isSuccessful()) {
+ mSpinnerDialogPaged.hideProgressBar(); // hide the progress bar after your request
+
+ for (Data item : response.body().getData()) {
+ mItems.add(item.getEmail());
+ }
+
+ mSpinnerDialogPaged.addMoreItems(mItems);
+ mSpinnerDialogPaged.bindOnSpinerListener(new OnSpinerItemClick() {
+ @Override
+ public void onClick(String item, int position) {
+ Toast.makeText(MainActivityPaged.this, item + " " + position + "", Toast.LENGTH_SHORT).show();
+ mSelectedItems.setText(item + " Position: " + position);
+
+ }
+ });
+
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+
+ }
+ });
+ }
+
+
+ }
diff --git a/app/build.gradle b/app/build.gradle
index 6a569b1..2c1d1ba 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -28,4 +28,9 @@ dependencies {
testImplementation 'junit:junit:4.12'
//implementation 'com.github.MdFarhanRaja:SearchableSpinner:2.1'
implementation project(':spinerdialog')
+ implementation 'com.squareup.retrofit2:retrofit:2.5.0'
+ implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
+ implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
+
+
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5116cb9..f5c8d3d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,13 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/in/galaxyofandroid/searchablespinner/Data.java b/app/src/main/java/in/galaxyofandroid/searchablespinner/Data.java
new file mode 100644
index 0000000..56f7a53
--- /dev/null
+++ b/app/src/main/java/in/galaxyofandroid/searchablespinner/Data.java
@@ -0,0 +1,23 @@
+package in.galaxyofandroid.searchablespinner;
+
+public class Data {
+
+ private Integer id;
+ private String email;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+}
diff --git a/app/src/main/java/in/galaxyofandroid/searchablespinner/MainActivityPaged.java b/app/src/main/java/in/galaxyofandroid/searchablespinner/MainActivityPaged.java
new file mode 100644
index 0000000..46911be
--- /dev/null
+++ b/app/src/main/java/in/galaxyofandroid/searchablespinner/MainActivityPaged.java
@@ -0,0 +1,105 @@
+package in.galaxyofandroid.searchablespinner;
+
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+
+import in.galaxyofandroid.spinerdialog.OnAfterTextChangedListener;
+import in.galaxyofandroid.spinerdialog.OnLoadMoreListener;
+import in.galaxyofandroid.spinerdialog.OnSpinerItemClick;
+import in.galaxyofandroid.spinerdialog.SpinnerDialogPaged;
+import retrofit2.Call;
+import retrofit2.Callback;
+
+public class MainActivityPaged extends AppCompatActivity {
+
+ ArrayList mItems = new ArrayList<>();
+ SpinnerDialogPaged mSpinnerDialogPaged;
+ TextView mSelectedItems;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ mSelectedItems = findViewById(R.id.txt);
+
+ mSpinnerDialogPaged = new SpinnerDialogPaged(MainActivityPaged.this, mItems,
+ "Select");
+
+ mSpinnerDialogPaged.setTitleColor(getResources().getColor(R.color.colorAccent));
+ mSpinnerDialogPaged.setSearchIconColor(getResources().getColor(R.color.colorAccent));
+ mSpinnerDialogPaged.setSearchTextColor(getResources().getColor(R.color.colorAccent));
+ mSpinnerDialogPaged.setItemColor(getResources().getColor(R.color.colorAccent));
+ mSpinnerDialogPaged.setItemDividerColor(getResources().getColor(R.color.colorAccent));
+ mSpinnerDialogPaged.setCloseColor(getResources().getColor(R.color.colorAccent));
+
+ mSpinnerDialogPaged.setCancellable(true); // for cancellable
+ mSpinnerDialogPaged.setShowKeyboard(false); // for open keyboard by default
+ mSpinnerDialogPaged.setVisibleThreshold(3); // set visible threshold
+ mSpinnerDialogPaged.setHideSearchField(true); // hide or show search field with true of false
+
+ getUsers(1); // make your request for api
+
+ findViewById(R.id.show).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mSpinnerDialogPaged.showSpinerDialog();
+ }
+ });
+
+
+ mSpinnerDialogPaged.bindOnLoadMoreListener(new OnLoadMoreListener() {
+ @Override
+ public void onLoadMore(int page) {
+ getUsers(page); // make your request for api with the new page returned
+ }
+ });
+
+ mSpinnerDialogPaged.bindOnAfterTextChanged(new OnAfterTextChangedListener() {
+ @Override
+ public void onAfterTextChanged(String term) {
+ // get the search term
+ }
+ });
+
+ }
+
+ private void getUsers(int page) {
+ mSpinnerDialogPaged.showProgressBar(); // show the progress bar before your request
+
+ RetrofitConfig.createService(UserService.class).getUsers(page).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, retrofit2.Response response) {
+ if (response.isSuccessful()) {
+ mSpinnerDialogPaged.hideProgressBar(); // hide the progress bar after your request
+
+ for (Data item : response.body().getData()) {
+ mItems.add(item.getEmail());
+ }
+
+ mSpinnerDialogPaged.addMoreItems(mItems);
+ mSpinnerDialogPaged.bindOnSpinerListener(new OnSpinerItemClick() {
+ @Override
+ public void onClick(String item, int position) {
+ Toast.makeText(MainActivityPaged.this, item + " " + position + "", Toast.LENGTH_SHORT).show();
+ mSelectedItems.setText(item + " Position: " + position);
+
+ }
+ });
+
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+
+ }
+ });
+ }
+
+
+}
diff --git a/app/src/main/java/in/galaxyofandroid/searchablespinner/Response.java b/app/src/main/java/in/galaxyofandroid/searchablespinner/Response.java
new file mode 100644
index 0000000..bee3e53
--- /dev/null
+++ b/app/src/main/java/in/galaxyofandroid/searchablespinner/Response.java
@@ -0,0 +1,35 @@
+package in.galaxyofandroid.searchablespinner;
+
+import java.util.List;
+
+public class Response {
+
+ private int page;
+ private int total;
+
+ private List data;
+
+ public List getData() {
+ return data;
+ }
+
+ public void setData(List data) {
+ this.data = data;
+ }
+
+ public int getPage() {
+ return page;
+ }
+
+ public void setPage(int page) {
+ this.page = page;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+}
diff --git a/app/src/main/java/in/galaxyofandroid/searchablespinner/RetrofitConfig.java b/app/src/main/java/in/galaxyofandroid/searchablespinner/RetrofitConfig.java
new file mode 100644
index 0000000..7fa4442
--- /dev/null
+++ b/app/src/main/java/in/galaxyofandroid/searchablespinner/RetrofitConfig.java
@@ -0,0 +1,35 @@
+package in.galaxyofandroid.searchablespinner;
+
+import com.google.gson.Gson;
+
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.OkHttpClient;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+public class RetrofitConfig {
+
+ private static final String BASE_URL = "https://reqres.in/";
+
+ public static S createService(Class serviceClass) {
+
+ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
+ loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+
+ OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
+ .readTimeout(15, TimeUnit.SECONDS);
+
+ httpClient.addInterceptor(loggingInterceptor);
+
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(BASE_URL)
+ .addConverterFactory(GsonConverterFactory.create(new Gson()))
+ .client(httpClient.build())
+ .build();
+
+ return retrofit.create(serviceClass);
+ }
+
+}
diff --git a/app/src/main/java/in/galaxyofandroid/searchablespinner/UserService.java b/app/src/main/java/in/galaxyofandroid/searchablespinner/UserService.java
new file mode 100644
index 0000000..c9a09c0
--- /dev/null
+++ b/app/src/main/java/in/galaxyofandroid/searchablespinner/UserService.java
@@ -0,0 +1,11 @@
+package in.galaxyofandroid.searchablespinner;
+
+import retrofit2.Call;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface UserService {
+
+ @GET("api/users")
+ Call getUsers(@Query("page") int page);
+}
diff --git a/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/EndlessScrollListener.java b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/EndlessScrollListener.java
new file mode 100644
index 0000000..c1c19d6
--- /dev/null
+++ b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/EndlessScrollListener.java
@@ -0,0 +1,39 @@
+package in.galaxyofandroid.spinerdialog;
+
+import android.widget.AbsListView;
+
+public abstract class EndlessScrollListener implements AbsListView.OnScrollListener {
+
+ private int visibleThreshold;
+ private int currentPage = 0;
+ private int previousTotal = 0;
+ private boolean loading = true;
+
+ public EndlessScrollListener(int visibleThreshold) {
+ this.visibleThreshold = visibleThreshold;
+ }
+
+ @Override
+ public void onScroll(AbsListView view, int firstVisibleItem,
+ int visibleItemCount, int totalItemCount) {
+ if (loading) {
+ if (totalItemCount > previousTotal) {
+ loading = false;
+ previousTotal = totalItemCount;
+ currentPage++;
+ }
+ }
+ if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
+ // I load the next page of gigs using a background task,
+ // but you can call any function here.
+ onLoadMore(currentPage + 1);
+ loading = true;
+ }
+ }
+
+ @Override
+ public void onScrollStateChanged(AbsListView view, int scrollState) {
+ }
+
+ abstract void onLoadMore(int currentPage);
+}
diff --git a/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/OnAfterTextChangedListener.java b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/OnAfterTextChangedListener.java
new file mode 100644
index 0000000..3b19248
--- /dev/null
+++ b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/OnAfterTextChangedListener.java
@@ -0,0 +1,6 @@
+package in.galaxyofandroid.spinerdialog;
+
+public interface OnAfterTextChangedListener {
+
+ void onAfterTextChanged(String term);
+}
diff --git a/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/OnLoadMoreListener.java b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/OnLoadMoreListener.java
new file mode 100644
index 0000000..098af87
--- /dev/null
+++ b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/OnLoadMoreListener.java
@@ -0,0 +1,10 @@
+package in.galaxyofandroid.spinerdialog;
+
+/**
+ * Created by Md Farhan Raja on 2/23/2017.
+ */
+
+public interface OnLoadMoreListener
+{
+ void onLoadMore(int page);
+}
diff --git a/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/SpinnerDialog.java b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/SpinnerDialog.java
index edf0084..32673b7 100644
--- a/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/SpinnerDialog.java
+++ b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/SpinnerDialog.java
@@ -15,15 +15,19 @@
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
+import android.widget.ProgressBar;
import android.widget.TextView;
import java.util.ArrayList;
+import java.util.HashSet;
/**
* Created by Md Farhan Raja on 2/23/2017.
*/
public class SpinnerDialog {
+
+ private ArrayAdapterWithContainsFilter adapter;
ArrayList items;
Activity context;
String dTitle, closeTitle = "Close";
@@ -34,15 +38,16 @@ public class SpinnerDialog {
boolean cancellable = false;
boolean showKeyboard = false;
boolean useContainsFilter = false;
- int titleColor,searchIconColor,searchTextColor,itemColor,itemDividerColor,closeColor;
-
- private void initColor(Context context){
- this.titleColor=context.getResources().getColor(R.color.colorBlack);
- this.searchIconColor=context.getResources().getColor(R.color.colorBlack);
- this.searchTextColor=context.getResources().getColor(R.color.colorBlack);
- this.itemColor=context.getResources().getColor(R.color.colorBlack);
- this.closeColor=context.getResources().getColor(R.color.colorBlack);
- this.itemDividerColor=context.getResources().getColor(R.color.colorLightGray);
+ int titleColor, searchIconColor, searchTextColor, itemColor, itemDividerColor, closeColor;
+ private ProgressBar mProgressBar;
+
+ private void initColor(Context context) {
+ this.titleColor = context.getResources().getColor(R.color.colorBlack);
+ this.searchIconColor = context.getResources().getColor(R.color.colorBlack);
+ this.searchTextColor = context.getResources().getColor(R.color.colorBlack);
+ this.itemColor = context.getResources().getColor(R.color.colorBlack);
+ this.closeColor = context.getResources().getColor(R.color.colorBlack);
+ this.itemDividerColor = context.getResources().getColor(R.color.colorLightGray);
}
public SpinnerDialog(Activity activity, ArrayList items, String dialogTitle) {
@@ -86,7 +91,10 @@ public void showSpinerDialog() {
View v = context.getLayoutInflater().inflate(R.layout.dialog_layout, null);
TextView rippleViewClose = (TextView) v.findViewById(R.id.close);
TextView title = (TextView) v.findViewById(R.id.spinerTitle);
- ImageView searchIcon=(ImageView) v.findViewById(R.id.searchIcon);
+ ImageView searchIcon = (ImageView) v.findViewById(R.id.searchIcon);
+ mProgressBar = v.findViewById(R.id.progress_bar);
+ mProgressBar.setVisibility(View.GONE);
+
rippleViewClose.setText(closeTitle);
title.setText(dTitle);
final ListView listView = (ListView) v.findViewById(R.id.list);
@@ -107,12 +115,12 @@ public void showSpinerDialog() {
// final ArrayAdapter adapter = new ArrayAdapter(context, R.layout.items_view, items);
- final ArrayAdapterWithContainsFilter adapter = new ArrayAdapterWithContainsFilter(context, R.layout.items_view, items) {
+ adapter = new ArrayAdapterWithContainsFilter(context, R.layout.items_view, items) {
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
- TextView text1=view.findViewById(R.id.text1);
+ TextView text1 = view.findViewById(R.id.text1);
text1.setTextColor(itemColor);
return view;
}
@@ -195,6 +203,26 @@ public void run() {
, 200);
}
+ public void hideProgressBar() {
+ if (mProgressBar != null) {
+ mProgressBar.setVisibility(View.GONE);
+ }
+ }
+
+ public void showProgressBar() {
+ if (mProgressBar != null) {
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+ }
+
+ public void addMoreItems(ArrayList items) {
+ this.items.addAll(items);
+
+ if (adapter != null) {
+ adapter.notifyDataSetChanged();
+ }
+ }
+
private boolean isCancellable() {
return cancellable;
}
diff --git a/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/SpinnerDialogPaged.java b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/SpinnerDialogPaged.java
new file mode 100644
index 0000000..b88069b
--- /dev/null
+++ b/spinerdialog/src/main/java/in/galaxyofandroid/spinerdialog/SpinnerDialogPaged.java
@@ -0,0 +1,301 @@
+package in.galaxyofandroid.spinerdialog;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.graphics.drawable.ColorDrawable;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+/**
+ * Created by Ângelo Robson on 22/07/2019.
+ */
+
+public class SpinnerDialogPaged {
+
+ ArrayList items;
+ Activity context;
+ String dTitle, closeTitle = "Close";
+ OnSpinerItemClick onSpinerItemClick;
+ private OnLoadMoreListener mOnLoadMoreListener;
+ AlertDialog alertDialog;
+ int pos;
+ int style;
+ boolean cancellable = false;
+ boolean showKeyboard = false;
+ boolean useContainsFilter = false;
+ int titleColor, searchIconColor, searchTextColor, itemColor, itemDividerColor, closeColor;
+ private ArrayAdapterWithContainsFilter adapter;
+ private int visibleThreshold = 5;
+ private boolean isHideSearchField;
+ private OnAfterTextChangedListener onAfterTextChangedListener;
+ private ProgressBar mProgressBar;
+
+ private void initColor(Context context) {
+ this.titleColor = context.getResources().getColor(R.color.colorBlack);
+ this.searchIconColor = context.getResources().getColor(R.color.colorBlack);
+ this.searchTextColor = context.getResources().getColor(R.color.colorBlack);
+ this.itemColor = context.getResources().getColor(R.color.colorBlack);
+ this.closeColor = context.getResources().getColor(R.color.colorBlack);
+ this.itemDividerColor = context.getResources().getColor(R.color.colorLightGray);
+ }
+
+ public SpinnerDialogPaged(Activity activity, ArrayList items, String dialogTitle) {
+ this.items = items;
+ this.context = activity;
+ this.dTitle = dialogTitle;
+ initColor(context);
+ }
+
+ public SpinnerDialogPaged(Activity activity, ArrayList items, String dialogTitle, String closeTitle) {
+ this.items = items;
+ this.context = activity;
+ this.dTitle = dialogTitle;
+ this.closeTitle = closeTitle;
+ initColor(context);
+ }
+
+ public SpinnerDialogPaged(Activity activity, ArrayList items, String dialogTitle, int style) {
+ this.items = items;
+ this.context = activity;
+ this.dTitle = dialogTitle;
+ this.style = style;
+ initColor(context);
+ }
+
+ public SpinnerDialogPaged(Activity activity, ArrayList items, String dialogTitle, int style, String closeTitle) {
+ this.items = items;
+ this.context = activity;
+ this.dTitle = dialogTitle;
+ this.style = style;
+ this.closeTitle = closeTitle;
+ initColor(context);
+ }
+
+ public void bindOnSpinerListener(OnSpinerItemClick onSpinerItemClick1) {
+ this.onSpinerItemClick = onSpinerItemClick1;
+ }
+
+ public void bindOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
+ this.mOnLoadMoreListener = onLoadMoreListener;
+ }
+
+ public void bindOnAfterTextChanged(OnAfterTextChangedListener onAfterTextChangedListener) {
+ this.onAfterTextChangedListener = onAfterTextChangedListener;
+ }
+
+ public void showSpinerDialog() {
+ AlertDialog.Builder adb = new AlertDialog.Builder(context);
+ View v = context.getLayoutInflater().inflate(R.layout.dialog_layout, null);
+ TextView rippleViewClose = v.findViewById(R.id.close);
+ TextView title = v.findViewById(R.id.spinerTitle);
+ ImageView searchIcon = v.findViewById(R.id.searchIcon);
+ mProgressBar = v.findViewById(R.id.progress_bar);
+ rippleViewClose.setText(closeTitle);
+ title.setText(dTitle);
+ final ListView listView = (ListView) v.findViewById(R.id.list);
+
+ ColorDrawable sage = new ColorDrawable(itemDividerColor);
+ listView.setDivider(sage);
+ listView.setDividerHeight(1);
+
+ final EditText searchBox = (EditText) v.findViewById(R.id.searchBox);
+ if (isShowKeyboard()) {
+ showKeyboard(searchBox);
+ }
+
+ if (isHideSearchField) {
+ searchIcon.setVisibility(View.INVISIBLE);
+ searchBox.setVisibility(View.INVISIBLE);
+ }
+
+ title.setTextColor(titleColor);
+ searchBox.setTextColor(searchTextColor);
+ rippleViewClose.setTextColor(closeColor);
+ searchIcon.setColorFilter(searchIconColor);
+
+ adapter = new ArrayAdapterWithContainsFilter(context, R.layout.items_view, items) {
+ @NonNull
+ @Override
+ public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
+ View view = super.getView(position, convertView, parent);
+ TextView text1 = view.findViewById(R.id.text1);
+ text1.setTextColor(itemColor);
+ return view;
+ }
+ };
+ listView.setAdapter(adapter);
+ listView.setOnScrollListener(new EndlessScrollListener(visibleThreshold) {
+ @Override
+ void onLoadMore(int currentPage) {
+ mOnLoadMoreListener.onLoadMore(currentPage);
+ }
+ });
+ adb.setView(v);
+ alertDialog = adb.create();
+ alertDialog.getWindow().getAttributes().windowAnimations = style;//R.style.DialogAnimations_SmileWindow;
+
+ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
+ TextView t = (TextView) view.findViewById(R.id.text1);
+ for (int j = 0; j < items.size(); j++) {
+ if (t.getText().toString().equalsIgnoreCase(items.get(j).toString())) {
+ pos = j;
+ }
+ }
+ onSpinerItemClick.onClick(t.getText().toString(), pos);
+ closeSpinerDialog();
+ }
+ });
+
+ searchBox.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable editable) {
+ onAfterTextChangedListener.onAfterTextChanged(searchBox.getText().toString());
+ }
+ });
+
+ rippleViewClose.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ closeSpinerDialog();
+ }
+ });
+ alertDialog.setCancelable(isCancellable());
+ alertDialog.setCanceledOnTouchOutside(isCancellable());
+ alertDialog.show();
+ }
+
+ public void addMoreItems(ArrayList items) {
+ HashSet hashSet = new HashSet<>();
+ hashSet.addAll(items);
+ this.items.clear();
+ this.items.addAll(hashSet);
+
+ if (adapter != null) {
+ adapter.notifyDataSetChanged();
+ }
+ }
+
+ public void setVisibleThreshold(int visibleThreshold) {
+ this.visibleThreshold = visibleThreshold;
+ }
+
+ public void closeSpinerDialog() {
+ hideKeyboard();
+ if (alertDialog != null) {
+ alertDialog.dismiss();
+ }
+ }
+
+ private void hideKeyboard() {
+ try {
+ InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputManager.hideSoftInputFromWindow(context.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ } catch (Exception e) {
+ }
+ }
+
+ private void showKeyboard(final EditText ettext) {
+ ettext.requestFocus();
+ ettext.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ InputMethodManager keyboard = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
+ keyboard.showSoftInput(ettext, 0);
+ }
+ }
+ , 200);
+ }
+
+ public void hideProgressBar() {
+ if (mProgressBar != null) {
+ mProgressBar.setVisibility(View.GONE);
+ }
+ }
+
+ public void showProgressBar() {
+ if (mProgressBar != null) {
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+ }
+
+ private boolean isCancellable() {
+ return cancellable;
+ }
+
+ public void setHideSearchField(boolean ishideSearchField) {
+ this.isHideSearchField = ishideSearchField;
+ }
+
+ public void setCancellable(boolean cancellable) {
+ this.cancellable = cancellable;
+ }
+
+ private boolean isShowKeyboard() {
+ return showKeyboard;
+ }
+
+ private boolean isUseContainsFilter() {
+ return useContainsFilter;
+ }
+
+
+ public void setShowKeyboard(boolean showKeyboard) {
+ this.showKeyboard = showKeyboard;
+ }
+
+ public void setUseContainsFilter(boolean useContainsFilter) {
+ this.useContainsFilter = useContainsFilter;
+ }
+
+ public void setTitleColor(int titleColor) {
+ this.titleColor = titleColor;
+ }
+
+ public void setSearchIconColor(int searchIconColor) {
+ this.searchIconColor = searchIconColor;
+ }
+
+ public void setSearchTextColor(int searchTextColor) {
+ this.searchTextColor = searchTextColor;
+ }
+
+ public void setItemColor(int itemColor) {
+ this.itemColor = itemColor;
+ }
+
+ public void setCloseColor(int closeColor) {
+ this.closeColor = closeColor;
+ }
+
+ public void setItemDividerColor(int itemDividerColor) {
+ this.itemDividerColor = itemDividerColor;
+ }
+
+}
diff --git a/spinerdialog/src/main/res/layout/dialog_layout.xml b/spinerdialog/src/main/res/layout/dialog_layout.xml
index 0d66209..ad3256f 100644
--- a/spinerdialog/src/main/res/layout/dialog_layout.xml
+++ b/spinerdialog/src/main/res/layout/dialog_layout.xml
@@ -1,10 +1,11 @@
+ android:dividerHeight="0.1dp" />
+
+