Skip to content

Commit 6a3d0c2

Browse files
committed
Fixed Glitch with notifyDataSetChanged()
1 parent ea1113e commit 6a3d0c2

File tree

2 files changed

+59
-49
lines changed

2 files changed

+59
-49
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Add this to your build.gradle file for your app.
2121
Add this to your dependencies in build.gradle for your project.
2222
```java
2323
dependencies {
24-
implementation 'com.github.jakebonk:BoardView:1.3.5'
24+
implementation 'com.github.jakebonk:BoardView:1.3.6'
2525
}
2626
```
2727
## Usage

boardview/src/main/java/com/allyants/boardview/BoardView.java

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import android.view.VelocityTracker;
1919
import android.view.View;
2020
import android.view.ViewGroup;
21+
import android.view.ViewParent;
2122
import android.view.animation.Animation;
2223
import android.view.animation.DecelerateInterpolator;
2324
import android.view.animation.ScaleAnimation;
@@ -807,13 +808,10 @@ public void notifyDataSetChanged(){
807808
ViewGroup parent_header = removeParent(boardAdapter.columns.get(column_pos).header);
808809
boardAdapter.columns.get(column_pos).header = boardAdapter.createHeaderView(getContext(), boardAdapter.columns.get(column_pos).header_object, column_pos);
809810
parent_header.addView(boardAdapter.columns.get(column_pos).header);
810-
}
811-
for(int item_pos = 0; item_pos < boardAdapter.columns.get(column_pos).objects.size();item_pos++){
812-
ViewGroup parent_item = removeParent(boardAdapter.columns.get(column_pos).views.get(item_pos));
813-
View view = boardAdapter.createItemView(getContext(), boardAdapter.columns.get(column_pos).header_object,boardAdapter.columns.get(column_pos).objects.get(item_pos), column_pos,item_pos);
814-
boardAdapter.columns.get(column_pos).views.remove(item_pos);
815-
boardAdapter.columns.get(column_pos).views.add(item_pos,view);
816-
parent_item.addView(view);
811+
ViewGroup layout = (ViewGroup)parent_header.getParent();
812+
boardAdapter.columns.get(column_pos).header.setOnClickListener(createHeaderOnClickListener(layout));
813+
boardAdapter.columns.get(column_pos).header.setOnLongClickListener(createHeaderOnLongClickListener(parent_header,layout));
814+
817815
}
818816
if(boardAdapter.columns.get(column_pos).footer != null) {
819817
ViewGroup parent_footer = removeParent(boardAdapter.columns.get(column_pos).footer);
@@ -823,6 +821,56 @@ public void notifyDataSetChanged(){
823821
}
824822
}
825823

824+
private OnClickListener createHeaderOnClickListener(final View parent_layout){
825+
return new OnClickListener() {
826+
@Override
827+
public void onClick(View v) {
828+
int pos = mParentLayout.indexOfChild(parent_layout);
829+
scrollToColumn(pos,true);
830+
headerClickListener.onClick(v,pos);
831+
}
832+
};
833+
}
834+
835+
private OnLongClickListener createHeaderOnLongClickListener(final ViewGroup layout,final View parent_layout){
836+
return new OnLongClickListener() {
837+
@Override
838+
public boolean onLongClick(View v) {
839+
if (mDragColumnStartCallback == null) {
840+
return false;
841+
}
842+
originalPosition = mParentLayout.indexOfChild(parent_layout);
843+
mDragColumnStartCallback.startDrag(layout, originalPosition);
844+
mLastSwap = originalPosition;
845+
for (int i = 0; i < mParentLayout.getChildCount(); i++) {
846+
BoardItem parentView = (BoardItem) mParentLayout.getChildAt(i);//Gets the parent layout
847+
for (int j = 0; j < parentView.getChildCount(); j++) {
848+
View childView = ((LinearLayout) parentView).getChildAt(j);
849+
scrollToColumn(originalPosition, true);
850+
scaleView(childView, parentView, 1f, GLOBAL_SCALE);
851+
}
852+
}
853+
854+
scrollToColumn(originalPosition, false);
855+
mCellIsMobile = true;
856+
mobileView = (View) (parent_layout);
857+
mHoverCell = getAndAddHoverView(mobileView, GLOBAL_SCALE);
858+
mobileView.setVisibility(INVISIBLE);
859+
return false;
860+
}
861+
};
862+
}
863+
864+
private OnClickListener createFooterOnClickListener(final View parent_layout){
865+
return new OnClickListener() {
866+
@Override
867+
public void onClick(View v) {
868+
int column_pos = mParentLayout.indexOfChild(parent_layout);
869+
footerClickListener.onClick(v,column_pos);
870+
}
871+
};
872+
}
873+
826874
public void addColumnList(@Nullable View header, ArrayList<View> items, @Nullable final View footer,int column_pos){
827875
final BoardItem parent_layout = new BoardItem(getContext());
828876
parent_layout.setBackgroundColor(background_color);
@@ -854,41 +902,9 @@ public void addColumnList(@Nullable View header, ArrayList<View> items, @Nullabl
854902
header.setId(HEADER_ID);
855903
removeParent(header);
856904
layout.addView(header);
857-
header.setOnClickListener(new OnClickListener() {
858-
@Override
859-
public void onClick(View v) {
860-
int pos = mParentLayout.indexOfChild(parent_layout);
861-
scrollToColumn(pos,true);
862-
headerClickListener.onClick(v,pos);
863-
}
864-
});
905+
header.setOnClickListener(createHeaderOnClickListener(parent_layout));
865906
if(!boardAdapter.columns.get(column_pos).column_locked) {
866-
header.setOnLongClickListener(new OnLongClickListener() {
867-
@Override
868-
public boolean onLongClick(View v) {
869-
if (mDragColumnStartCallback == null) {
870-
return false;
871-
}
872-
originalPosition = mParentLayout.indexOfChild(parent_layout);
873-
mDragColumnStartCallback.startDrag(layout, originalPosition);
874-
mLastSwap = originalPosition;
875-
for (int i = 0; i < mParentLayout.getChildCount(); i++) {
876-
BoardItem parentView = (BoardItem) mParentLayout.getChildAt(i);//Gets the parent layout
877-
for (int j = 0; j < parentView.getChildCount(); j++) {
878-
View childView = ((LinearLayout) parentView).getChildAt(j);
879-
scrollToColumn(originalPosition, true);
880-
scaleView(childView, parentView, 1f, GLOBAL_SCALE);
881-
}
882-
}
883-
884-
scrollToColumn(originalPosition, false);
885-
mCellIsMobile = true;
886-
mobileView = (View) (parent_layout);
887-
mHoverCell = getAndAddHoverView(mobileView, GLOBAL_SCALE);
888-
mobileView.setVisibility(INVISIBLE);
889-
return false;
890-
}
891-
});
907+
header.setOnLongClickListener(createHeaderOnLongClickListener(layout,parent_layout));
892908
}
893909
}
894910
parent_layout.addView(scroll_view);
@@ -908,13 +924,7 @@ public boolean onLongClick(View v) {
908924
layout.addView(footer);
909925
footer_layout.setLayoutParams(params);
910926
parent_layout.addView(footer_layout);
911-
footer.setOnClickListener(new OnClickListener() {
912-
@Override
913-
public void onClick(View v) {
914-
int column_pos = mParentLayout.indexOfChild(parent_layout);
915-
footerClickListener.onClick(v,column_pos);
916-
}
917-
});
927+
footer.setOnClickListener(createFooterOnClickListener(parent_layout));
918928
footer.post(new Runnable() {
919929
@Override
920930
public void run() {

0 commit comments

Comments
 (0)