簡體   English   中英

在ActionBarSherlock搜索欄中提出自定義搜索建議

[英]Making custom search suggestions in ActionBarSherlock search bar

這就是我使用ActionBar搜索小部件進行基本搜索的方式。 顯然,這是在布局的listView中提供建議的簡單方法。 但我想在搜索框內提供建議。 盡管可以在普通搜索框中執行此操作,但如何使用“操作欄搜索”框執行相同操作。

 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();
        }



    }

您可以將搜索小部件添加到ActionBar Sherlock,搜索對話框具有此功能,並且它是一個簡單的可擴展操作項,因此實現起來非常簡單。

教程將向您展示如何使用搜索小部件來完成所需的一切,包括搜索建議

即使SearchView已實現並起作用,搜索建議仍可在較新的設備上使用,但不適用於較舊的設備(例如Gingerbread)。 這是一個問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM