Просмотр исходного кода

[검색][New] 필터 적용 세부 상황
- 필터를 리셋하거나 아무것도 선택하지 않을 경우 필터 없이 로딩해서 표시해준다.

hyodong.min 6 лет назад
Родитель
Сommit
ca5a2e67eb

+ 23 - 19
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/SearchResultModel.java

@@ -134,7 +134,7 @@ public class SearchResultModel extends Model {
   /**
    * 필터 취소 후 재 검색 시 이용
    */
-  public void searchNofilter() {
+  public void searchWithoutFilter() {
     search(selectedCategoryIndex);
   }
 
@@ -324,6 +324,10 @@ public class SearchResultModel extends Model {
      * -> 결과 일부 있음 => hash 수가 다름
      * -> 결과 모두 있음 => hash 수가 맞음
      */
+    if (null == resultBean) {
+      return;
+    }
+
     resultContentsBeans = null;
     categoryBeans = null;
     tagResultBeans = null;
@@ -557,6 +561,7 @@ public class SearchResultModel extends Model {
   }
 
   private SearchResultBean filterSearchResultBean;
+  private SearchResultBean filterSearchResultBeanOnlyProperty;  // 지역/핫플 상세 필터를 요구할 때 이전 검색 결과를 제줄해야한다. 이는 지역/핫플이 적용되지 않은 필터 데이터를 갖고 있다.
   private List<FilterSectionBean> filterSectionBeans;
 
   public final List<FilterSectionBean> getFilterList() {
@@ -578,12 +583,9 @@ public class SearchResultModel extends Model {
     }
 
     // 필터 적용
-    if (applyFilter(requestBean) == false) {
-      isFilterApplied = false;
-      filterSearchResultBean = null;
-      Log.i("APP# SearchResultModel | loadFilteringContents", "|" + " 선택 필터 없음.");
-      listener.onEvent(new Event.Builder(Event.SUCCESS).integer(getFilteredCount()).build());
-      return;
+    boolean hasFilter = applyFilter(requestBean);
+    if (hasFilter == false) {
+      Log.i("APP# SearchResultModel | loadFilteringContents", "|" + " 선택 필터 없음 -> 필터 없이 로딩 - 리스트 수 반환");
     }
 
     Log.w("APP# SearchResultModel | loadFilteringContents", "|" + " search ---> " + requestBean.toJson());
@@ -597,7 +599,12 @@ public class SearchResultModel extends Model {
       public void onApiSuccess(SearchResultBean resultBean) {
         filterSearchResultBean = resultBean;
         if (null != filterSearchResultBean) {
-          isFilterApplied = true;
+          if (StringUtil.isEmpty(requestBean.getFilterArea()) && StringUtil.isEmpty(requestBean.getFilterPlace())) {
+            // 지역/핫플 필터가 없는 데이터는 별도 보관한다. 상세 필터를 요구할 때 이용
+            filterSearchResultBeanOnlyProperty = filterSearchResultBean;
+          }
+
+          isFilterApplied = hasFilter;
           int count = filterSearchResultBean.getListCount();
           if (null == filterSearchResultBean.getTagBeans() || filterSearchResultBean.getTagBeans().size() == 0) {
             count = 0;
@@ -629,14 +636,15 @@ public class SearchResultModel extends Model {
     // 지역 필터 적용 이전의 데이터를 저장해두고 넘겨줘야 한다.
     // 필터링 한 데이터가 있다면 그것을 이용
     //
-    if (null != filterSearchResultBean) {
+    if (null != filterSearchResultBeanOnlyProperty) {
       // 일치하는 결과가 있음.
-      if (null != filterSearchResultBean.getTagBeans() && filterSearchResultBean.getTagBeans().size() > 0) {
-        if (null != filterSearchResultBean.getData() && filterSearchResultBean.getData().size() > 0) {
-          targetList = filterSearchResultBean.getData();
+      if (null != filterSearchResultBeanOnlyProperty.getTagBeans() && filterSearchResultBeanOnlyProperty.getTagBeans().size() > 0) {
+        if (null != filterSearchResultBeanOnlyProperty.getData() && filterSearchResultBeanOnlyProperty.getData().size() > 0) {
+          targetList = filterSearchResultBeanOnlyProperty.getData();
         }
       }
     }
+
     /*
       디테일 정보를 요청할 경우 각 태그별로 컨텐츠 수를 표시하기 위해서 기 검색된 컨텐츠의 no 들을 함께 넘겨준다.
      */
@@ -794,13 +802,7 @@ public class SearchResultModel extends Model {
       }
     }
 
-    if (null == filterSearchResultBean) {
-      isFilterApplied = false;
-    }
-    else {
-      isFilterApplied = true;
-      parseResult(filterSearchResultBean);
-    }
+    parseResult(filterSearchResultBean);
 
     onResult(new Event.Builder(Event.SUCCESS).integer(Event.FILTER_COMMIT).build());
   }
@@ -826,6 +828,8 @@ public class SearchResultModel extends Model {
    * - need commit too
    */
   public void resetFilter() {
+    filterSearchResultBean = null;
+    filterSearchResultBeanOnlyProperty = null;
     isFilterApplied = false;
 
     int len = filterSectionBeans.size();

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/search/SearchResultPresenter.java

@@ -175,11 +175,11 @@ public class SearchResultPresenter extends Presenter<SearchResultModel, ISearchR
         }
         else if (event.getInteger() == Event.FILTER_COMMIT) {
           // 필터 데이터 적용
-          if(model.isFilterApplied()) {
+          if (model.isFilterApplied()) {
             renderWithFiltering();
           }
           else {
-            model.searchNofilter();
+            model.searchWithoutFilter();
           }
 
           view.setFilterIcon(model.isFilterApplied());

Разница между файлами не показана из-за своего большого размера
+ 32 - 9
app/src/sandbox/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIService.java