2012-08-08 2 views
0

이것은 ActionBar Search 위젯을 사용하여 기본 검색을 수행하는 방법입니다. 이 방법은 레이아웃의 listView에 제안이 제공되는 쉬운 방법입니다. 그러나 검색 창 자체에 제안을 원합니다. 일반 검색 창에서 검색을 수행 할 수는 있지만 Actionbar Search 상자를 사용하여 검색을 수행하는 방법은 무엇입니까?ActionBarSherlock 검색 창에서 맞춤 검색 제안 만들기

public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 
     menu.add(0, 1, 1,"Search").setIcon(R.drawable.ic_search_inverse).setActionView(R.layout.collapsible_edittext).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 
     return super.onCreateOptionsMenu(menu); 
    } 



    @Override 
     public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { 
      switch (item.getItemId()) { 
       case 1: 
        search = (AutoCompleteTextView) item.getActionView(); 
        search.addTextChangedListener(filterTextWatcher); 
        search.requestFocus(); 
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
        return true; 
      } 
      return false; 
     }  

    private TextWatcher filterTextWatcher = new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // your search logic here 
      doGeoSearch(String.valueOf(s)); 



     } 

    }; 

    public void doGeoSearch(String query){ 
     Geocoder geocoder; 
     ArrayList<Address> addresses; 
     ArrayList<String> address = new ArrayList<String>() ; 
     geocoder = new Geocoder(this, Locale.getDefault()); 
     try { 
      addresses = (ArrayList<Address>) geocoder.getFromLocationName(query, 6); 
      Log.d("Address",String.valueOf(addresses)); 
      for(int i = 0;i<addresses.size();i++) 
      { 
      String addr = new String(); 
      addr.concat(addresses.get(i).getAddressLine(0)); 
      addr.concat(addresses.get(i).getAddressLine(1)); 
      addr = addresses.get(i).getAddressLine(0) + addresses.get(i).getLocality() + addresses.get(i).getAdminArea(); 
      //addr.concat(addresses.get(i).getAddressLine(2)); 
      Log.d("addr",addr); 
      address.add(addr); 


      } 

      SearchAddressAdapater addressList = new SearchAddressAdapater(getApplicationContext(),R.layout.search_list,addresses, LocationActivity.this); 
      //addressView.setAdapter(addressList); 
      //ListView addressListView = new ListView(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



    } 

답변

1

당신은 당신의 액션 바 셜록에 검색 위젯을 추가 할 수있는 검색 대화 상자가이 기능을 가지고 있으며 간단한 확장 작업 항목 그대로 구현하기가 매우 간단합니다.

This 튜토리얼은 어떻게 SearchView 구현과 작품, 검색 제안은 새로운 장치에서 작동 된

0

비록 당신이 검색 제안을 포함하여 검색 위젯에 필요한 모든 작업을 수행하는 방법을 보여줍니다,하지만 나이에 작동하지 않습니다 진저 브레드와 같은 장치. 문제는 다음과 같습니다.

https://github.com/JakeWharton/ActionBarSherlock/issues/659