Skip to content

Commit 2c4beb1

Browse files
committed
Fix Bug Exception on Scroll, Fix Bug replace all some views stuck, Fix bug null layout param
1 parent 1dd5454 commit 2c4beb1

File tree

2 files changed

+40
-34
lines changed

2 files changed

+40
-34
lines changed

app/src/main/java/com/ramanaptr/sample/MainActivity.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class MainActivity : AppCompatActivity() {
3333
/**
3434
* turn "isSingleLayout" into "false" when you want to try multi layout stuff
3535
* */
36-
private var isSingleLayout = false
36+
private var isSingleLayout = true
3737

3838
override fun onCreate(savedInstanceState: Bundle?) {
3939
super.onCreate(savedInstanceState)
@@ -70,7 +70,7 @@ class MainActivity : AppCompatActivity() {
7070
binding.srl.setOnRefreshListener {
7171
binding.srl.isRefreshing = false
7272
currentPage = 0
73-
rvSample.removeAll()
73+
rvSample.reset()
7474
when {
7575
isSingleLayout -> {
7676
exampleDataForSingleLayout(15)
@@ -140,7 +140,7 @@ class MainActivity : AppCompatActivity() {
140140
}
141141

142142
// this is just dummy data
143-
exampleDataForSingleLayout(5)
143+
exampleDataForSingleLayout(20)
144144
}
145145

146146
private fun exampleEzRecycleMultipleLayout() {
@@ -219,7 +219,7 @@ class MainActivity : AppCompatActivity() {
219219
// Example handling data in single layout
220220
val dataList = arrayListOf<SampleData>().apply {
221221

222-
// if (currentPage >= 2) return@apply // limit the page for test stop populate the data
222+
// if (currentPage >= 2) return@apply // limit the page for test stop populate the data
223223
for (i in 1..size) {
224224
add(SampleData("Key $i", "Value $i"))
225225
}
@@ -259,7 +259,7 @@ class MainActivity : AppCompatActivity() {
259259
// populate the data list
260260
val dataList = arrayListOf<SampleData>().apply {
261261

262-
// if (currentPage >= 2) return@apply // limit the page for test stop populate the data
262+
// if (currentPage >= 2) return@apply // limit the page for test stop populate the data
263263
for (i in 1..size) {
264264

265265
// example handling data using ezViewType in layout 2

ez-recyleview/src/main/java/com/ramanaptr/widget/EzRecyclerView.java

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ public class EzRecyclerView<Data extends EzBaseData> extends RecyclerView {
4343
private int startShimmerSize = 0;
4444
private int endShimmerSize = 0;
4545
private int offset = 0;
46+
private int offsetTemp = 0;
4647
private int limit = 0;
48+
private int limitTemp = 0;
4749
private int currentPage = 0;
4850
private Data data;
4951

@@ -206,38 +208,38 @@ public void startShimmer(int shimmerSize, Data data) {
206208
}
207209

208210
public void hideShimmer() {
209-
if (endShimmerSize > 0) {
210-
baseAdapter.removeRange(startShimmerSize, (endShimmerSize + startShimmerSize));
211-
endShimmerSize = 0;
212-
endShimmerSize = tempShimmerSize;
213-
flagEzRecyclerViewFirstLoad();
214-
flagShimmerStop();
215-
216-
// Remove all views when data list is zero
217-
if (baseAdapter.getDataList().size() <= 0) {
218-
removeAllViews();
211+
post(() -> {
212+
if (endShimmerSize > 0) {
213+
baseAdapter.removeRange(startShimmerSize, (endShimmerSize + startShimmerSize));
214+
endShimmerSize = 0;
215+
endShimmerSize = tempShimmerSize;
216+
flagEzRecyclerViewFirstLoad();
217+
flagShimmerStop();
218+
219+
// Remove all views when data list is zero
220+
if (baseAdapter.getDataList().size() <= 0) {
221+
removeAllViews();
222+
}
219223
}
220-
}
224+
});
221225
}
222226

223227
private void settingAnimator() {
224228
}
225229

226230
public void add(@NonNull Data data) {
227231
flagStopLoading();
228-
baseAdapter.add(data);
232+
post(() -> baseAdapter.add(data));
229233
}
230234

231235
public void addAll(@NonNull List<Data> dataList) {
232-
post(() -> {
233-
if (dataList.size() <= 0) {
234-
flagOnStartLoading();
235-
currentPage = 0;
236-
return;
237-
}
238-
flagStopLoading();
239-
baseAdapter.addAll(dataList);
240-
});
236+
if (dataList.size() <= 0) {
237+
flagOnStartLoading();
238+
currentPage = 0;
239+
return;
240+
}
241+
flagStopLoading();
242+
post(() -> baseAdapter.addAll(dataList));
241243
}
242244

243245
public void replace(@NonNull Data data) {
@@ -249,7 +251,6 @@ public void replaceAll(@NonNull List<Data> dataList) {
249251
if (dataList.size() <= 0) {
250252
flagOnStartLoading();
251253
currentPage = 0;
252-
return;
253254
}
254255
flagStopLoading();
255256
removeAllViews();
@@ -278,14 +279,15 @@ public void refresh() {
278279
baseAdapter.refresh();
279280
}
280281

281-
public void resetAllViewsAndShimmer() {
282-
offset = 0;
283-
limit = 0;
284-
endShimmerSize = tempShimmerSize;
285-
flagOnStartLoading();
282+
/**
283+
* Use #reset() every re-start
284+
* Not recommend for first init
285+
* */
286+
public void reset() {
287+
this.limit = limitTemp;
288+
this.offset = offsetTemp;
286289
flagEzRecyclerViewFirstLoad();
287290
removeAll();
288-
removeAllViews();
289291
}
290292

291293
public void setEzPaginationListener(EzPaginationListener ezPaginationListener) {
@@ -294,13 +296,17 @@ public void setEzPaginationListener(EzPaginationListener ezPaginationListener) {
294296
this.offset = 0;
295297
this.limit = 0;
296298
this.currentPage = 0;
299+
this.offsetTemp = 0;
300+
this.limitTemp = 0;
297301
}
298302

299303
public void setEzPaginationListener(int initialLimit, int initialOffset, EzPaginationListener ezPaginationListener) {
300304
addOnScrollListener(onScrollListener);
301305
this.ezPaginationListener = ezPaginationListener;
302306
this.offset = initialOffset;
303307
this.limit = initialLimit;
308+
this.offsetTemp = initialOffset;
309+
this.limitTemp = initialLimit;
304310
}
305311

306312
private final OnScrollListener onScrollListener = new OnScrollListener() {
@@ -471,7 +477,6 @@ public void setEzMultipleLayout(EzMultipleLayout ezMultipleLayout) {
471477
this.ezMultipleLayout = ezMultipleLayout;
472478
}
473479

474-
475480
public void add(@NonNull Data data) {
476481
this.dataList.add(data);
477482
notifyDataSetChanged();
@@ -593,6 +598,7 @@ public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
593598
holder.setIsRecyclable(false);
594599
final Data data = dataList.get(position);
595600
data.setPosition(position); // to know position of view
601+
if (data.isCustomShimmerLayout()) return;
596602
listener.setDataOnViewHolder(holder.itemView, data);
597603
// startShimmerItem(holder, data);
598604
}

0 commit comments

Comments
 (0)