Преглед на файлове

[마이][New] 북마크 리스트와 카테고리 양방향 연동 진행 중

hyodong.min преди 7 години
родител
ревизия
2b53661ab2

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/category/CategoryID.java

@@ -14,6 +14,7 @@ package kr.co.zumo.app.lifeplus.view.screen.category;
  * @since 2018. 11. 6.
  */
 public class CategoryID {
+  public final static String CATEGORY_NONE = "-1";
   public final static String CATEGORY_1 = "2";
   public final static String CATEGORY_2 = "3";
   public final static String CATEGORY_3 = "4";

+ 23 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookMarkListFragment.java

@@ -186,13 +186,28 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
     recyclerView.setLayoutManager(layoutManager);
     recyclerView.setAdapter(bookMarkListAdapter);
 
-//    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
-//      @Override
-//      public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
-//        Log.e("APP#  BookMarkListFragment | onScrollStateChanged", "| state: " + newState);
-//      }
-//    });
-
+    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+      @Override
+      public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+        int firstIndex = layoutManager.findFirstVisibleItemPosition();
+        int firstCompIndex = layoutManager.findFirstCompletelyVisibleItemPosition();
+        int lastIndex = layoutManager.findLastVisibleItemPosition();
+        int lastCompIndex = layoutManager.findLastCompletelyVisibleItemPosition();
+
+        // 처음 화면에 완벽히 보여지면 선택
+        // 스크롤 방향에 따라서 새로 보여지는 쪽을 기준으로 선택한다.
+        if (dy < 0) {
+          presenter.onCategoryIndexChanged(firstCompIndex);
+        }
+        else {
+          presenter.onCategoryIndexChanged(lastCompIndex);
+        }
+        Log.i("APP# BookMarkListFragment | onScrollStateChanged", "|" + "first: " + firstIndex);
+        Log.i("APP# BookMarkListFragment | onScrollStateChanged", "|" + "first comp: " + firstCompIndex);
+        Log.i("APP# BookMarkListFragment | onScrollStateChanged", "|" + "last: " + lastIndex);
+        Log.i("APP# BookMarkListFragment | onScrollStateChanged", "|" + "last comp: " + lastCompIndex);
+      }
+    });
   }
 
   @Override
@@ -248,6 +263,7 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
 
   @Override
   public void setCategoryFocus(int categoryIndex) {
+    Log.w("APP# BookMarkListFragment | setCategoryFocus", "|" + " categoryIndex: " + categoryIndex);
     int len = 5;
     for (int i = 0; i < len; ++i) {
       TextView textView = findViewById(ResourceUtil.getId("text_view_category_" + i));

+ 62 - 22
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookMarkListModel.java

@@ -39,6 +39,9 @@ public class BookMarkListModel extends Model {
   private List<BookmarkBean> bookmarkBeans;
   private boolean[] categoryIndies;
   private List<Integer> categoryAnchorIndies;
+  private List<BookmarkBean> categorizedBookmarkList;
+
+  private int categoryIndex;
 
   private int hashCode = this.hashCode();
 
@@ -95,6 +98,14 @@ public class BookMarkListModel extends Model {
     }
   }
 
+  public int getCategoryIndex() {
+    return categoryIndex;
+  }
+
+  public void setCategoryIndex(int categoryIndex) {
+    this.categoryIndex = categoryIndex;
+  }
+
   /**
    * 최신순 정렬된 리스트 반환
    * - 데이터 변형 없이 로딩된 자체
@@ -107,7 +118,7 @@ public class BookMarkListModel extends Model {
 
   /**
    * 카테고리로 구분/정렬된 리스트 반환
-   * - 카테고리 인덱스 배열도 함께 저장되므로 이후 사용할 수 있다. {@code getCategoryIndies()}
+   * - 카테고리 인덱스 배열도 별도 저장되므로 이후 사용할 수 있다. {@code getCategoryIndies()}
    *
    * @return
    */
@@ -130,26 +141,8 @@ public class BookMarkListModel extends Model {
       if (StringUtil.isEmpty(categoryNumber)) {
         categoryNumber = "";
       }
-      switch (categoryNumber) {
-        case CategoryID.CATEGORY_1:
-          index = 0;
-          break;
-        case CategoryID.CATEGORY_2:
-          index = 1;
-          break;
-        case CategoryID.CATEGORY_3:
-          index = 2;
-          break;
-        case CategoryID.CATEGORY_4:
-          index = 3;
-          break;
-        case CategoryID.CATEGORY_5:
-          index = 4;
-          break;
-        default:
-          index = -1;
-          break;
-      }
+
+      index = getCategoryIndexById(categoryNumber);
 
       if (index > -1) {
         List<BookmarkBean> beans = bookmarks.get(index);
@@ -165,7 +158,7 @@ public class BookMarkListModel extends Model {
     categoryAnchorIndies = new ArrayList<>();
     categoryIndies = new boolean[bookmarks.size()];
 
-    List<BookmarkBean> categorizedBookmarkList = new ArrayList<>();
+    categorizedBookmarkList = new ArrayList<>();
     int len = bookmarks.size();
     for (int i = 0; i < len; ++i) {
       List<BookmarkBean> beans = bookmarks.get(i);
@@ -195,6 +188,31 @@ public class BookMarkListModel extends Model {
     return categorizedBookmarkList;
   }
 
+  private int getCategoryIndexById(String categoryNumber) {
+    int index;
+    switch (categoryNumber) {
+      case CategoryID.CATEGORY_1:
+        index = 0;
+        break;
+      case CategoryID.CATEGORY_2:
+        index = 1;
+        break;
+      case CategoryID.CATEGORY_3:
+        index = 2;
+        break;
+      case CategoryID.CATEGORY_4:
+        index = 3;
+        break;
+      case CategoryID.CATEGORY_5:
+        index = 4;
+        break;
+      default:
+        index = -1;
+        break;
+    }
+    return index;
+  }
+
   /**
    * 카테고리 인덱스 배열
    * - {@code getCategorizedBookmarkList()} 후 세팅된다.
@@ -233,6 +251,27 @@ public class BookMarkListModel extends Model {
     return -1;
   }
 
+  /**
+   * 카테고리 구분된 index 로 해당 카테고리 index 를 반환
+   * - 없으면 -1 반환
+   *
+   * @param categorizedIndex
+   * @return
+   */
+  public int getCategoryIndexOfCategorized(int categorizedIndex) {
+    String categoryNumber = CategoryID.CATEGORY_NONE;
+    if (null != categorizedBookmarkList) {
+      BookmarkBean bean = categorizedBookmarkList.get(categorizedIndex);
+      if (null != bean) {
+        categoryNumber = bean.getCategoryNumber();
+        if (StringUtil.isEmpty(categoryNumber)) {
+          categoryNumber = CategoryID.CATEGORY_NONE;
+        }
+      }
+    }
+    return getCategoryIndexById(categoryNumber);
+  }
+
   public void loadBookMarkList() {
     disposableBookMarkList = BookmarkModelHelper.getInstance().loadMyBookmark(new PageRequestBean(), new IAPISimpleModuleListener<BookmarkListResultBean>() {
       @Override
@@ -298,4 +337,5 @@ public class BookMarkListModel extends Model {
   public void clearFlagChanged() {
     ContentsFlagHelper.getInstance().clearChanged(hashCode);
   }
+
 }

+ 16 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookMarkListPresenter.java

@@ -126,7 +126,7 @@ public class BookMarkListPresenter extends Presenter<BookMarkListModel, IBookMar
         index = event.getIndex();
         Log.i("APP# BookMarkListPresenter | onEventInternal", "| Event.CATEGORY_CLICK: " + event);
         view.scrollToAnchor(model.getCategoryAnchorIndies().get(index));
-        view.setCategoryFocus(index);
+//        setCategoryFocus(index);
         break;
       default:
         break;
@@ -134,6 +134,12 @@ public class BookMarkListPresenter extends Presenter<BookMarkListModel, IBookMar
 
   }
 
+  private void setCategoryFocus(int index) {
+    model.setCategoryIndex(index);
+    view.setCategoryFocus(model.getCategoryIndex());
+
+  }
+
   @Override
   public void onResult(Event event) {
     int integer = event.getInteger();
@@ -170,7 +176,7 @@ public class BookMarkListPresenter extends Presenter<BookMarkListModel, IBookMar
   private void drawBookmarkContents() {
     view.drawContents(model.getCategorizedBookmarkList());
     view.updateCategory(model.getCategoryIndies());
-    view.setCategoryFocus(0);
+    setCategoryFocus(0);
   }
 
   @Override
@@ -182,4 +188,12 @@ public class BookMarkListPresenter extends Presenter<BookMarkListModel, IBookMar
   public void onNavigationClickSearch(NavigationBar navigationBar) {
     showErrorDialog(R.string.ready_comment);
   }
+
+  public void onCategoryIndexChanged(int categorizedIndex) {
+    int index = model.getCategoryIndexOfCategorized(categorizedIndex);
+
+    if (index > -1 && model.getCategoryIndex() != index) {
+      setCategoryFocus(index);
+    }
+  }
 }