diff --git a/README.md b/README.md index 39a9597..3d1386f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# InfiniteListView [![JitPack](https://jitpack.io/v/ugurcany/InfiniteListView.svg)](https://jitpack.io/#ugurcany/InfiniteListView) [![API](https://img.shields.io/badge/API-11%2B-red.svg?style=flat)](https://android-arsenal.com/api?level=11) [![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](http://opensource.org/licenses/MIT) +# InfiniteListView [![JitPack](https://jitpack.io/v/ugurcany/InfiniteListView.svg)](https://jitpack.io/#ugurcany/InfiniteListView) **InfiniteListView** is a custom Android ListView that gets extended at each time new items are loaded by swiping to the bottom of list. It also supports swipe-to-refresh behavior. @@ -30,13 +30,15 @@ See the `app` module for the sample usage of **InfiniteListView** and **Infinite - Includes the following methods: - `infiniteListView.addNewItem(item);` -> adds new item to list - - `infiniteListView.clearList();` -> clears entire list (and triggers `onNewLoadRequired()`) + - `infiniteListView.clearList();` -> clears entire list - `infiniteListView.startLoading();` -> call this before item loading starts - `infiniteListView.stopLoading();` -> call this after item loading ends - - `infiniteListView.setEndOfLoading();` -> call this when there is no more item to load + - `infiniteListView.setEndOfLoading(isEndOfLoading);` -> call this to let the view know whether there is more to load or not - Custom XML attributes: - `swipeRefreshIndicatorColor` (*color*) + - `scrollbarVisible` (*boolean*) + - `dividerVisible` (*boolean*) diff --git a/app/build.gradle b/app/build.gradle index e35b791..fca8a58 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { applicationId "com.izmyr.infinitelistview" - minSdkVersion 11 + minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c632b1e..e75c848 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,7 +8,9 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> - + diff --git a/app/src/main/java/com/izmyr/infinitelistview/MainActivity.java b/app/src/main/java/com/izmyr/infinitelistview/MainActivity.java index e897271..467608d 100644 --- a/app/src/main/java/com/izmyr/infinitelistview/MainActivity.java +++ b/app/src/main/java/com/izmyr/infinitelistview/MainActivity.java @@ -40,7 +40,7 @@ protected void onCreate(Bundle savedInstanceState) { infiniteListView.init(adapter, loadingView); - refreshList(); + loadNewItems(); } //SIMULATES ITEM LOADING @@ -74,6 +74,8 @@ protected void onPostExecute(Void param) { } itemOffset += ITEM_COUNT_TO_LOAD; Log.d("InfiniteListView", "Current item count = " + itemOffset); + + infiniteListView.setEndOfLoading(false); } infiniteListView.stopLoading(); @@ -84,12 +86,12 @@ protected void onPostExecute(Void param) { //DO THIS ON SWIPE-REFRESH public void refreshList() { itemOffset = 0; - infiniteListView.setEndOfLoading(false); - infiniteListView.clearList(); //TRIGGERS ONNEWLOADREQUIRED + infiniteListView.clearList(); + loadNewItems(); } //DO THIS ON ITEM CLICK - public void clickItem(final int position) { + public void clickItem(int position) { Snackbar.make(container, "Item clicked: " + position, Snackbar.LENGTH_SHORT).show(); } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a8c882d..0a70a44 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,6 +11,8 @@ android:id="@+id/infiniteListView" android:layout_width="match_parent" android:layout_height="match_parent" - app:swipeRefreshIndicatorColor="@color/colorAccent" /> + app:swipeRefreshIndicatorColor="@color/colorAccent" + app:scrollbarVisible="true" + app:dividerVisible="true" /> \ No newline at end of file diff --git a/library/build.gradle b/library/build.gradle index 060691f..7213d34 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion "23.0.2" defaultConfig { - minSdkVersion 11 + minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" diff --git a/library/src/main/java/com/izmyr/views/InfiniteListView.java b/library/src/main/java/com/izmyr/views/InfiniteListView.java index 39bcde4..70e54f1 100644 --- a/library/src/main/java/com/izmyr/views/InfiniteListView.java +++ b/library/src/main/java/com/izmyr/views/InfiniteListView.java @@ -21,7 +21,7 @@ public class InfiniteListView extends FrameLayout { private boolean loading = false; private View loadingView; - private boolean endOfLoading = true; + private boolean isEndOfLoading = true; private InfiniteListAdapter infiniteListAdapter; @@ -54,6 +54,7 @@ public void onRefresh() { }); listView = (ListView) view.findViewById(R.id.listView); + listView.setFooterDividersEnabled(false); //XML CONFIG if(attrs != null) { @@ -64,6 +65,16 @@ public void onRefresh() { int swipeRefreshIndicatorColor = typedArray.getColor(R.styleable.InfiniteListView_swipeRefreshIndicatorColor, context.getResources().getColor(android.R.color.black)); swipeRefreshLayout.setColorSchemeColors(swipeRefreshIndicatorColor); + //SCROLLBAR VISIBILITY + boolean scrollbarVisible = typedArray.getBoolean(R.styleable.InfiniteListView_scrollbarVisible, true); + listView.setVerticalScrollBarEnabled(scrollbarVisible); + + //DIVIDER VISIBILITY + boolean dividerVisible = typedArray.getBoolean(R.styleable.InfiniteListView_dividerVisible, true); + if(!dividerVisible) { + listView.setDividerHeight(0); + } + } finally { typedArray.recycle(); } @@ -75,7 +86,6 @@ public void init(InfiniteListAdapter infiniteListAdapter, final View loadingV this.infiniteListAdapter = infiniteListAdapter; listView.setAdapter(infiniteListAdapter); - listView.setFooterDividersEnabled(false); this.loadingView = loadingView; @@ -86,7 +96,7 @@ public void onScrollStateChanged(AbsListView view, int scrollState) { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - if(endOfLoading) + if(isEndOfLoading) return; int lastVisibleItem = visibleItemCount + firstVisibleItem; @@ -124,6 +134,7 @@ public void addNewItem(T newItem){ } public void clearList(){ + isEndOfLoading = true; infiniteListAdapter.clearList(); } @@ -142,8 +153,8 @@ public void stopLoading(){ loading = false; } - public void setEndOfLoading(boolean endOfLoading) { - this.endOfLoading = endOfLoading; + public void setEndOfLoading(boolean isEndOfLoading) { + this.isEndOfLoading = isEndOfLoading; } } diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml index 8272c2b..93970a7 100644 --- a/library/src/main/res/values/attrs.xml +++ b/library/src/main/res/values/attrs.xml @@ -2,5 +2,7 @@ + + \ No newline at end of file