2017-12-19 5 views
2

나는 SearchView을 상단 바에 넣은 하나의 Activity 앱을 가지고 있습니다. 온라인 검색을 구현하는 데 필요한 수천 개의 매뉴얼/튜토리얼이 있기 때문에 고민 중입니다. 그러나 그 중 일부는 구식 인 것으로 보입니다. 공식 문서조차도 저에게 분명하지 않습니다.파편이있는 SearchView

이유 중 하나는 내 응용 프로그램에서 하나의 Activity을 사용하고 Fragment과 전체 상호 작용을 처리해야합니다.

SearchView의 동작 방식을 고민하고 있습니다. 메뉴 항목을 클릭하면 상단의 검색 창을 표시 한 다음 기록 및 제안을 제공하고 검색 할 때마다 열어 보겠습니다. 결과가 서로 다른 Fragment (실제로는 세 가지 결과 유형이있는 TabLayout) - 이것이 Youtube의 생각입니다.

무언가를 검색 할 때 화면에 다른 Fragment이 나타나지만 사용자가 뒤로 화살표를 클릭하면 사용자가 이전 Fragment으로 다시 이동합니다. (다시로드하지 않아도됩니다. 정보 - 사용자가 많은 양의 데이터를로드했을 가능성이있는 끝없는 스크롤이 있습니다.) : 클릭 할 때마다 검색의 동작보기가 사라지고 다시 히트하면 이전 Fragment이 표시되지만 내용은 다시로드됩니다.

이 내 setupSearch() 방법 (? 그것은 dialog로 구현되어 있기 때문에 내 생각) 제안 목록을 표시 할 때

또한
private fun setupSearch(menu: Menu) { 
     // Get the SearchView and set the searchable configuration 
     val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager 
     val searchItem = menu.findItem(R.id.app_search) 
     val searchView = searchItem.actionView as SearchView 
     // Assumes current activity is the searchable activity 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName)) 


     var searchEditTextId = R.id.search_src_text; 
     var searchEditText = searchView.findViewById<AutoCompleteTextView>(searchEditTextId) 
     var dropDownAnchor = searchView.findViewById<View>(searchEditText.dropDownAnchor) 

     if (dropDownAnchor != null) { 
      dropDownAnchor.addOnLayoutChangeListener { p0, p1, p2, p3, p4, p5, p6, p7, p8 -> 
       // screen width 
       var screenWidthPixel = [email protected] 
       searchEditText.dropDownWidth = screenWidthPixel 
      } 
     } 

     searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { 
      override fun onQueryTextSubmit(query: String): Boolean { 
       var searchSuggestion = SearchRecentSuggestions([email protected], SearchHistoryProvider.AUTHORITY, SearchHistoryProvider.MODE) 
       searchSuggestion.saveRecentQuery(query, null) 

       supportFragmentManager 
         .beginTransaction() 
         .replace(R.id.fragment_container, SearchResultsContainerFragment.newInstance()) 
         .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) 
         .addToBackStack("SEARCH") 
       .commit() 
       return false 
      } 

      override fun onQueryTextChange(newText: String): Boolean { 
       return false 
      } 
     }) 

     searchItem.setOnActionExpandListener(object : MenuItem.OnActionExpandListener{ 
      override fun onMenuItemActionExpand(item: MenuItem): Boolean { 
       return true 
      } 

      override fun onMenuItemActionCollapse(item: MenuItem): Boolean { 
       return true 
      } 

     }) 

     searchView.setOnSuggestionListener(object: SearchView.OnSuggestionListener { 
      override fun onSuggestionSelect(position: Int): Boolean { 
       return false 
      } 

      override fun onSuggestionClick(position: Int): Boolean { 
       return false 
      } 

     }) 
    } 

는, Activity 어떻게 든 일시 정지 및 재개 보인다 . 이것은 문제가되지 않지만 비디오 창을 항상 모든 뷰 위에 유지하므로 (Fragment으로 모든 작업을 수행해야 할 필요가 있음) 비디오가 분할 초 동안 계속 중지됩니다. 그것을 막을 수 있습니까?

검색은 쉬운 일처럼 보였지만 악몽이되었습니다. 공식 문서에서는 "검색 가능"인 다른 Activity을 만들어야하지만 그렇게 할 수 없다고 말합니다.

+0

아니에요. 현재 보이는 조각을 확인하고 해당 조각에'QueryText'를 보내고 그 조각의 목록을 필터링하면됩니다. –

+0

여러 문제가있는 것 같아요, 주요 문제를 격리 할 수 ​​있습니까? – Remario

답변

1

되돌아 갈 때 (검색이 포함 된) 조각을 다시로드하지 않으려면 add를 사용하여 바꾸기 조각을 변경해야합니다. 이는 replace가 remove (모든 프래그먼트)에 이어 add (새 프래그먼트)를 수행하기 때문입니다.

+0

좋아요,이 문제 중 하나가 수정되었습니다. 감사합니다! – MichelReap

+0

@MichelReap, 다음은 무엇입니까? – azizbekian

+0

검색 기록에 활동이 있기 때문에 비디오가 멈출 때마다 표시되는 비디오 창이 있습니다 onPAusing and onResuming – MichelReap