मैं अपने ऐप को एक सिंगल गतिविधि बनाने की कोशिश कर रहा हूं। यह गतिविधि एक खोज बनाने और एक खोज प्राप्त करने में सक्षम होना चाहिए। दुर्भाग्यवश, जब मैं एक्शन बार में खोज बटन पर क्लिक करता हूं तो मुझे अपने सर्च व्यू में "डबल" सर्च बार मिल रहा है। मेरा मतलब है कि एक खोज बार (अंधेरा - खोज दृश्य) है जो एक्शन बार में एक सेकंड के लिए दिखाई देता है, और उसके बाद एक दूसरा (सफेद) क्रिया पट्टी पर दिखाई देता है। कोई मदद? मैं क्या गलत कर रहा हूं? क्षमा करें, यह खोज चीज सभी नई और भ्रमित है।एकल गतिविधि में एंड्रॉइड सर्च गतिविधि
MainActivity (केवल गतिविधि):
public class MainActivity extends ActionBarActivity {
Menu mMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getSupportActionBar().setDisplayShowTitleEnabled(false);
setContentView(R.layout.activity_main);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//use the query to search your data somehow
}
}
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
mMenu = menu;
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.search:
onSearchRequested();
return true;
default:
return false;
}
}
@SuppressLint("NewApi")
@Override
public boolean onSearchRequested() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
MenuItem mi = mMenu.findItem(R.id.search);
if(mi.isActionViewExpanded()){
mi.collapseActionView();
} else{
mi.expandActionView();
}
} else{
//onOptionsItemSelected(mMenu.findItem(R.id.search));
}
return super.onSearchRequested();
}
}
main.xml (मेनू xml):
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:com.brianco.andypedia="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/search"
android:title="@string/action_settings"
android:icon="@drawable/ic_launcher"
android:actionProviderClass="android.support.v7.widget.ShareActionProvider"
com.brianco.andypedia:showAsAction="always|collapseActionView"
com.brianco.andypedia:actionViewClass="android.support.v7.widget.SearchView" />
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
</menu>
searchable.xml:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" />
प्रकट में
:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
<activity
android:name="com.brianco.andypedia.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
</activity>
<meta-data android:name="android.app.default_searchable"
android:value=".MainActivity" />
धन्यवाद, मैंने अपना मैनिफेस्ट अपडेट किया। यह मेरी समस्या नहीं थी, लेकिन यह जानना वाकई अच्छा है। मेरे पास होने वाली समस्या के समाधान के लिए मेरा उत्तर देखें। –
बढ़िया, मेरे लिए भी जानना अच्छा है! – Szymon
फिल द्वारा समझाए गए अनुसार अपनी खोज क्वेरी को संसाधित करने के लिए onNewIntent() विधि का उपयोग करना याद रखें। – djondal