diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableLayout.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableLayout.java
index 881eb7d..6feb173 100644
--- a/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableLayout.java
+++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableLayout.java
@@ -114,6 +114,7 @@ public class AdaptiveTableLayout extends ViewGroup implements ScrollHelper.Scrol
*/
@Nullable
private TableInstanceSaver mSaver;
+ private boolean hasData= false;
public AdaptiveTableLayout(Context context) {
super(context);
@@ -304,6 +305,7 @@ public void setAdapter(@Nullable AdaptiveTableAdapter adapter) {
// register notify callbacks
mAdapter.registerDataSetObserver(this);
adapter.registerDataSetObserver(new DataSetObserverProxy(mAdapter));
+ hasData= adapter.getColumnCount() >0 && adapter.getRowCount() >0;
} else {
// remove adapter
mAdapter = null;
@@ -333,6 +335,7 @@ public void setAdapter(@Nullable DataAdaptiveTableLayoutAdapter adapter) {
mAdapter = adapter;
if (mAdapter != null) {
+ hasData= adapter.getColumnCount() >0 && adapter.getRowCount() >0;
mAdapter.registerDataSetObserver(this);
}
@@ -375,64 +378,67 @@ public void scrollTo(int x, int y) {
@Override
public void scrollBy(int x, int y) {
// block scroll one axle
- int tempX = mState.isRowDragging() ? 0 : x;
- int tempY = mState.isColumnDragging() ? 0 : y;
-
- int diffX = tempX;
- int diffY = tempY;
-
- int shadowShiftX = mManager.getColumnCount() * mSettings.getCellMargin();
- int shadowShiftY = mManager.getRowCount() * mSettings.getCellMargin();
-
- long maxX = mManager.getFullWidth() + shadowShiftX;
- long maxY = mManager.getFullHeight() + shadowShiftY;
-
- if (mState.getScrollX() + tempX <= 0) {
- // scroll over view to the left
- diffX = mState.getScrollX();
- mState.setScrollX(0);
- } else if (mSettings.getLayoutWidth() > maxX) {
- // few items and we have free space.
- diffX = 0;
- mState.setScrollX(0);
- } else if (mState.getScrollX() + mSettings.getLayoutWidth() + tempX > maxX) {
- // scroll over view to the right
- diffX = (int) (maxX - mState.getScrollX() - mSettings.getLayoutWidth());
-
- mState.setScrollX(mState.getScrollX() + diffX);
- } else {
- mState.setScrollX(mState.getScrollX() + tempX);
- }
-
- if (mState.getScrollY() + tempY <= 0) {
- // scroll over view to the top
- diffY = mState.getScrollY();
- mState.setScrollY(0);
- } else if (mSettings.getLayoutHeight() > maxY) {
- // few items and we have free space.
- diffY = 0;
- mState.setScrollY(0);
- } else if (mState.getScrollY() + mSettings.getLayoutHeight() + tempY > maxY) {
- // scroll over view to the bottom
- diffY = (int) (maxY - mState.getScrollY() - mSettings.getLayoutHeight());
- mState.setScrollY(mState.getScrollY() + diffY);
- } else {
- mState.setScrollY(mState.getScrollY() + tempY);
- }
+ if(hasDataApter()) {
- if (diffX == 0 && diffY == 0) {
- return;
- }
+ int tempX = mState.isRowDragging() ? 0 : x;
+ int tempY = mState.isColumnDragging() ? 0 : y;
- if (mAdapter != null) {
- // refresh views
- recycleViewHolders();
- mVisibleArea.set(mState.getScrollX(),
- mState.getScrollY(),
- mState.getScrollX() + mSettings.getLayoutWidth(),
- mState.getScrollY() + mSettings.getLayoutHeight());
- addViewHolders(mVisibleArea);
- refreshViewHolders();
+ int diffX = tempX;
+ int diffY = tempY;
+
+ int shadowShiftX = mManager.getColumnCount() * mSettings.getCellMargin();
+ int shadowShiftY = mManager.getRowCount() * mSettings.getCellMargin();
+
+ long maxX = mManager.getFullWidth() + shadowShiftX;
+ long maxY = mManager.getFullHeight() + shadowShiftY;
+
+ if (mState.getScrollX() + tempX <= 0) {
+ // scroll over view to the left
+ diffX = mState.getScrollX();
+ mState.setScrollX(0);
+ } else if (mSettings.getLayoutWidth() > maxX) {
+ // few items and we have free space.
+ diffX = 0;
+ mState.setScrollX(0);
+ } else if (mState.getScrollX() + mSettings.getLayoutWidth() + tempX > maxX) {
+ // scroll over view to the right
+ diffX = (int) (maxX - mState.getScrollX() - mSettings.getLayoutWidth());
+
+ mState.setScrollX(mState.getScrollX() + diffX);
+ } else {
+ mState.setScrollX(mState.getScrollX() + tempX);
+ }
+
+ if (mState.getScrollY() + tempY <= 0) {
+ // scroll over view to the top
+ diffY = mState.getScrollY();
+ mState.setScrollY(0);
+ } else if (mSettings.getLayoutHeight() > maxY) {
+ // few items and we have free space.
+ diffY = 0;
+ mState.setScrollY(0);
+ } else if (mState.getScrollY() + mSettings.getLayoutHeight() + tempY > maxY) {
+ // scroll over view to the bottom
+ diffY = (int) (maxY - mState.getScrollY() - mSettings.getLayoutHeight());
+ mState.setScrollY(mState.getScrollY() + diffY);
+ } else {
+ mState.setScrollY(mState.getScrollY() + tempY);
+ }
+
+ if (diffX == 0 && diffY == 0) {
+ return;
+ }
+
+ if (mAdapter != null) {
+ // refresh views
+ recycleViewHolders();
+ mVisibleArea.set(mState.getScrollX(),
+ mState.getScrollY(),
+ mState.getScrollX() + mSettings.getLayoutWidth(),
+ mState.getScrollY() + mSettings.getLayoutHeight());
+ addViewHolders(mVisibleArea);
+ refreshViewHolders();
+ }
}
}
@@ -1383,18 +1389,20 @@ public boolean onDown(MotionEvent e) {
@Override
public boolean onSingleTapUp(MotionEvent e) {
// simple click event
- ViewHolder viewHolder = getViewHolderByPosition((int) e.getX(), (int) e.getY());
- if (viewHolder != null) {
- OnItemClickListener onItemClickListener = mAdapter.getOnItemClickListener();
- if (onItemClickListener != null) {
- if (viewHolder.getItemType() == ViewHolderType.ITEM) {
- onItemClickListener.onItemClick(viewHolder.getRowIndex(), getBindColumn(viewHolder.getColumnIndex()));
- } else if (viewHolder.getItemType() == ViewHolderType.ROW_HEADER) {
- onItemClickListener.onRowHeaderClick(viewHolder.getRowIndex());
- } else if (viewHolder.getItemType() == ViewHolderType.COLUMN_HEADER) {
- onItemClickListener.onColumnHeaderClick(getBindColumn(viewHolder.getColumnIndex()));
- } else {
- onItemClickListener.onLeftTopHeaderClick();
+ if(hasDataApter()) {
+ ViewHolder viewHolder = getViewHolderByPosition((int) e.getX(), (int) e.getY());
+ if (viewHolder != null) {
+ OnItemClickListener onItemClickListener = mAdapter.getOnItemClickListener();
+ if (onItemClickListener != null) {
+ if (viewHolder.getItemType() == ViewHolderType.ITEM) {
+ onItemClickListener.onItemClick(viewHolder.getRowIndex(), getBindColumn(viewHolder.getColumnIndex()));
+ } else if (viewHolder.getItemType() == ViewHolderType.ROW_HEADER) {
+ onItemClickListener.onRowHeaderClick(viewHolder.getRowIndex());
+ } else if (viewHolder.getItemType() == ViewHolderType.COLUMN_HEADER) {
+ onItemClickListener.onColumnHeaderClick(getBindColumn(viewHolder.getColumnIndex()));
+ } else {
+ onItemClickListener.onLeftTopHeaderClick();
+ }
}
}
}
@@ -1405,60 +1413,68 @@ public boolean onSingleTapUp(MotionEvent e) {
public void onLongPress(MotionEvent e) {
// prepare drag and drop
// search view holder by x, y
- ViewHolder viewHolder = getViewHolderByPosition((int) e.getX(), (int) e.getY());
- if (viewHolder != null) {
+ if(hasDataApter()) {
+ ViewHolder viewHolder = getViewHolderByPosition((int) e.getX(), (int) e.getY());
+ if (viewHolder != null) {
- if (!mSettings.isDragAndDropEnabled()) {
- checkLongPressForItemAndFirstHeader(viewHolder);
- return;
- }
- // save start dragging touch position
- mDragAndDropPoints.setStart((int) (mState.getScrollX() + e.getX()), (int) (mState.getScrollY() + e.getY()));
- if (viewHolder.getItemType() == ViewHolderType.COLUMN_HEADER) {
- // dragging column header
- mState.setRowDragging(false, viewHolder.getRowIndex());
- mState.setColumnDragging(true, viewHolder.getColumnIndex());
+ if (!mSettings.isDragAndDropEnabled()) {
+ checkLongPressForItemAndFirstHeader(viewHolder);
+ return;
+ }
+ // save start dragging touch position
+ mDragAndDropPoints.setStart((int) (mState.getScrollX() + e.getX()), (int) (mState.getScrollY() + e.getY()));
+ if (viewHolder.getItemType() == ViewHolderType.COLUMN_HEADER) {
+ // dragging column header
+ mState.setRowDragging(false, viewHolder.getRowIndex());
+ mState.setColumnDragging(true, viewHolder.getColumnIndex());
- // set dragging flags to column's view holder
- setDraggingToColumn(viewHolder.getColumnIndex(), true);
+ // set dragging flags to column's view holder
+ setDraggingToColumn(viewHolder.getColumnIndex(), true);
- mShadowHelper.removeColumnsHeadersShadow(this);
+ mShadowHelper.removeColumnsHeadersShadow(this);
- mShadowHelper.addLeftShadow(this);
- mShadowHelper.addRightShadow(this);
+ mShadowHelper.addLeftShadow(this);
+ mShadowHelper.addRightShadow(this);
- // update view
- refreshViewHolders();
+ // update view
+ refreshViewHolders();
- } else if (viewHolder.getItemType() == ViewHolderType.ROW_HEADER) {
- // dragging column header
- mState.setRowDragging(true, viewHolder.getRowIndex());
- mState.setColumnDragging(false, viewHolder.getColumnIndex());
+ } else if (viewHolder.getItemType() == ViewHolderType.ROW_HEADER) {
+ // dragging column header
+ mState.setRowDragging(true, viewHolder.getRowIndex());
+ mState.setColumnDragging(false, viewHolder.getColumnIndex());
- // set dragging flags to row's view holder
- setDraggingToRow(viewHolder.getRowIndex(), true);
+ // set dragging flags to row's view holder
+ setDraggingToRow(viewHolder.getRowIndex(), true);
- mShadowHelper.removeRowsHeadersShadow(this);
+ mShadowHelper.removeRowsHeadersShadow(this);
- mShadowHelper.addTopShadow(this);
- mShadowHelper.addBottomShadow(this);
+ mShadowHelper.addTopShadow(this);
+ mShadowHelper.addBottomShadow(this);
- // update view
- refreshViewHolders();
+ // update view
+ refreshViewHolders();
- } else {
- checkLongPressForItemAndFirstHeader(viewHolder);
+ } else {
+ checkLongPressForItemAndFirstHeader(viewHolder);
+ }
}
}
}
+ private boolean hasDataApter() {
+ return hasData;
+ }
+
private void checkLongPressForItemAndFirstHeader(ViewHolder viewHolder) {
- OnItemLongClickListener onItemClickListener = mAdapter.getOnItemLongClickListener();
- if (onItemClickListener != null) {
- if (viewHolder.getItemType() == ViewHolderType.ITEM) {
- onItemClickListener.onItemLongClick(viewHolder.getRowIndex(), viewHolder.getColumnIndex());
- } else if (viewHolder.getItemType() == ViewHolderType.FIRST_HEADER) {
- onItemClickListener.onLeftTopHeaderLongClick();
+ if(hasDataApter()) {
+ OnItemLongClickListener onItemClickListener = mAdapter.getOnItemLongClickListener();
+ if (onItemClickListener != null) {
+ if (viewHolder.getItemType() == ViewHolderType.ITEM) {
+ onItemClickListener.onItemLongClick(viewHolder.getRowIndex(), viewHolder.getColumnIndex());
+ } else if (viewHolder.getItemType() == ViewHolderType.FIRST_HEADER) {
+ onItemClickListener.onLeftTopHeaderLongClick();
+ }
}
}
}
@@ -1613,7 +1629,7 @@ private ViewHolder getViewHolderByPosition(int x, int y) {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
- if (!mState.isDragging()) {
+ if (!mState.isDragging() && hasDataApter()) {
// simple scroll....
if (!mScrollerRunnable.isFinished()) {
mScrollerRunnable.forceFinished();
@@ -1625,7 +1641,7 @@ public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float d
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
- if (!mState.isDragging()) {
+ if (!mState.isDragging() && hasDataApter()) {
// simple fling
mScrollerRunnable.start(
mState.getScrollX(), mState.getScrollY(),
diff --git a/sample/build.gradle b/sample/build.gradle
index bfb661b..bf5fd95 100644
--- a/sample/build.gradle
+++ b/sample/build.gradle
@@ -30,4 +30,5 @@ dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile project(':library')
+ compile 'com.android.support.constraint:constraint-layout:1.0.2'
}
diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml
index 29ae63f..8750f6d 100644
--- a/sample/src/main/AndroidManifest.xml
+++ b/sample/src/main/AndroidManifest.xml
@@ -1,27 +1,28 @@
+
+ package="com.cleveroad.sample">
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/sample/src/main/java/com/cleveroad/sample/SampleApplication.java b/sample/src/main/java/com/cleveroad/sample/SampleApplication.java
index fcf7e9d..c6e2070 100644
--- a/sample/src/main/java/com/cleveroad/sample/SampleApplication.java
+++ b/sample/src/main/java/com/cleveroad/sample/SampleApplication.java
@@ -9,6 +9,6 @@ public class SampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
- AppEventsLogger.activateApp(this);
+ // AppEventsLogger.activateApp(this);
}
}
diff --git a/sample/src/main/java/com/cleveroad/sample/ui/Activity.java b/sample/src/main/java/com/cleveroad/sample/ui/Activity.java
new file mode 100644
index 0000000..165e844
--- /dev/null
+++ b/sample/src/main/java/com/cleveroad/sample/ui/Activity.java
@@ -0,0 +1,15 @@
+package com.cleveroad.sample.ui;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+import com.cleveroad.sample.R;
+
+public class Activity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_);
+ }
+}
diff --git a/sample/src/main/java/com/cleveroad/sample/ui/SampleActivity.java b/sample/src/main/java/com/cleveroad/sample/ui/SampleActivity.java
index 9e814db..7708ea9 100644
--- a/sample/src/main/java/com/cleveroad/sample/ui/SampleActivity.java
+++ b/sample/src/main/java/com/cleveroad/sample/ui/SampleActivity.java
@@ -16,12 +16,12 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
- if (savedInstanceState == null) {
- getSupportFragmentManager()
- .beginTransaction()
- .add(R.id.container, CsvPickerFragment.newInstance(), CsvPickerFragment.class.getSimpleName())
- .commit();
- }
+// if (savedInstanceState == null) {
+// getSupportFragmentManager()
+// .beginTransaction()
+// .add(R.id.container, CsvPickerFragment.newInstance(), CsvPickerFragment.class.getSimpleName())
+// .commit();
+// }
}
@Override
@@ -29,11 +29,11 @@ public void onCsvFileSelected(String fileName) {
if (fileName != null && !fileName.isEmpty()) {
File file = new File(fileName);
if (file.exists() && fileName.endsWith(".csv")) {
- getSupportFragmentManager()
- .beginTransaction()
- .replace(R.id.container, TableLayoutFragment.newInstance(fileName), CsvPickerFragment.class.getSimpleName())
- .addToBackStack(CsvPickerFragment.class.getSimpleName())
- .commit();
+// getSupportFragmentManager()
+// .beginTransaction()
+// .replace(R.id.container, TableLayoutFragment.newInstance(fileName), CsvPickerFragment.class.getSimpleName())
+// .addToBackStack(CsvPickerFragment.class.getSimpleName())
+// .commit();
} else {
Toast.makeText(this, R.string.not_csv_file_error, Toast.LENGTH_SHORT).show();
}
diff --git a/sample/src/main/res/layout/activity_.xml b/sample/src/main/res/layout/activity_.xml
new file mode 100644
index 0000000..4308153
--- /dev/null
+++ b/sample/src/main/res/layout/activity_.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/sample/src/main/res/layout/activity_sample.xml b/sample/src/main/res/layout/activity_sample.xml
index 876ee1c..8475589 100644
--- a/sample/src/main/res/layout/activity_sample.xml
+++ b/sample/src/main/res/layout/activity_sample.xml
@@ -7,9 +7,13 @@
android:background="@color/medium_jungle_green"
android:focusableInTouchMode="true">
-
-
+ android:layout_height="match_parent"
+ android:layout_below="@+id/toolbar"
+ app:cellMargin="1dp"
+ app:dragAndDropEnabled="true"
+ app:fixedHeaders="true"
+ app:solidRowHeaders="true"/>