2012-04-19 12 views
13

मैं एपीआई 8 ऐप में ActionBarSherlock के साथ SearchViewCompat का उपयोग करने की कोशिश कर रहा हूं।android.support.v4.widget.SearchViewCompat उदाहरण?

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuItem item = menu.add("Search") 
     .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search) 
     .setActionView(R.layout.collapsible_edittext); 
    item.setShowAsAction(
     MenuItem.SHOW_AS_ACTION_ALWAYS | 
     MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 

    // To use SearchViewCompat, I need to add it to the Menu item as well: 
    View searchView = SearchViewCompat.newSearchView(this); 
    // ... 
    SearchViewCompat.setOnQueryTextListener(...); 
    // ... 
    item.setActionView(searchView); 

कृपया ध्यान दें दोनों ऊपर और नीचे कोड setActionView() कॉल करने के लिए जरूरत है। क्या इसका मतलब है खोज करना संभव नहीं है?

+1

है। शायद लोग आपकी समस्या को ठीक करने में आपकी मदद कर सकते हैं। – THelper

+1

धन्यवाद थेलपर। ऐसा लगता है कि मेरा स्थानीय दस्तावेज़ पुराना है और मुझे एक विशिष्ट डेवलपर विषय मिला: http://developer.android.com/training/search/backward-compat.html – woodglue

उत्तर

2

वास्तविक समस्या क्या है? विजेट मौजूद नहीं है क्योंकि SearchViewCompat पूर्व-एचसी उपकरणों के लिए वापस आ जाएगा। इसका मतलब है कि आपको अपना स्वयं का कस्टम एक्शन व्यू देना होगा जो एचसी सर्च व्यू का अनुकरण करता है।

आप एंड्रॉइड स्रोतों से SearchView घटक का बैकपोर्ट भी कर सकते हैं और इसका उपयोग कर सकते हैं।

अन्यथा, आप केवल मौजूदा खोज इंटरफेस का उपयोग कर सकते हैं एंड्रॉइड में, एचसी + डिवाइसों के लिए आप एक खोज करने के लिए एक्शन व्यू का उपयोग करते हैं, लेकिन फियोयो और जिंजरब्रेड डिवाइस पर उपयोगकर्ता खोज आइकन पर क्लिक करता है और एक खोज बार एनिमेट करता है ऊपर से।

उम्मीद है कि इससे मदद मिलती है।

+0

क्या आप किसी कार्यान्वयन को इंगित कर सकते हैं, यदि कोई हो? –

6

आप ActionBarSherlock लाइब्रेरी ver 4.2 का उपयोग कर रहे हैं, तो आप बनाने के लिए एक ActionBarSherlock SearchView विजेट के साथ एपीआई 11 SearchView विजेट जगह ले सकता है यह पिछड़े संगत:

search.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/menu_search" 
     android:icon="@drawable/ic_action_search" 
     android:title="@string/description_search" 
     android:orderInCategory="0" 
     android:actionViewClass="com.actionbarsherlock.widget.SearchView" 
     android:showAsAction="ifRoom|collapseActionView" /> 
</menu> 

गतिविधि वर्ग

//IMPORTANT!!! 
import com.actionbarsherlock.widget.SearchView; 

.. ।

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    getSupportMenuInflater().inflate(R.menu.search, menu); 
    setupSearchMenuItem(menu); 
    return true; 
} 

private void setupSearchMenuItem(Menu menu) { 
    MenuItem searchItem = menu.findItem(R.id.menu_search); 
    if (searchItem != null) { 
     SearchView searchView = (SearchView) searchItem.getActionView(); 
     if (searchView != null) { 
      SearchManager searchManager = 
       (SearchManager) getSystemService(SEARCH_SERVICE); 
      searchView.setSearchableInfo(
       searchManager.getSearchableInfo(getComponentName())); 
      } 
     } 
    } 
} 
2

अपनी गतिविधि में कुछ बिंदु पर:

public class HomeActivity extends SherlockFragmentActivity implements 
    SearchView.OnQueryTextListener { 

// ...  
SearchView searchView = (com.actionbarsherlock.widget.SearchView) 
    actionBarCustom.findViewById(R.id.search); 
SearchManager sm = (SearchManager)getSystemService(SEARCH_SERVICE); 
searchView.setSearchableInfo(sm.getSearchableInfo(getComponentName())); 
searchView.setSubmitButtonEnabled(true); 
searchView.setOnQueryTextListener(this); 

और फिर अपनी सूची एडाप्टर फिल्टर करें:

@Override 
public boolean onQueryTextSubmit(String query) { 
    return true; 
} 

@Override 
public boolean onQueryTextChange(String newText) { 
    mAdapter.getFilter().filter(newText.trim()); 
    return false; 
} 

इस तरह, आपके सूची एडाप्टर फ़िल्टर को लागू करना चाहिए।

0

बेहतर MenuItemCompat उपयोग करने के लिए, मुझे लगता है कि यह उपयोगी कोड के लिए पूछ आप कोड आप अब तक अपने प्रश्न का मिल गया है जोड़ सकते हैं के बजाय के लिए आप

getMenuInflater().inflate(R.menu.main, menu); 
    MenuItem searchItem = menu.findItem(R.id.search); 
    SearchManager searchManager =(SearchManager)getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView)MenuItemCompat.getActionView(searchItem); 
    SearchableInfo info = searchManager.getSearchableInfo(getComponentName()); 
    searchView.setSearchableInfo(info); 
संबंधित मुद्दे