2012-08-08 113 views
0

这就是我使用ActionBar Search小部件进行基本搜索的方式。这显然是在布局中的listView中提供建议的简单方法。但我想在搜索框内提出建议。尽管可以在普通搜索框中执行此操作,但如何使用“操作栏搜索”框执行相同操作。在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教程将告诉你怎么做,你需要搜索小工具,包括搜索建议