为什么Android SearchWidget不发送意图?
好的,我已经阅读了这个网站上的所有教程和内容,这应该是有效的。我在以前的一个项目中尝试过这样做,得到了同样的结果,所以我错过了比打字更高级的东西 搜索窗口小部件出现并似乎正在工作。但是,当提交搜索时,不会发生任何事情。它就在那里。我尝试重写onNewIntent()和onSearchRequested()以添加Log.d()输出,以查看是否调用过该代码。我也在那里添加了断点。。。没有什么!这似乎说明了清单中的意图是如何建立的,但在我看来是正确的。也许另一双眼睛可以发现一些东西 manifest.xml代码段为什么Android SearchWidget不发送意图?,android,android-intent,searchview,Android,Android Intent,Searchview,好的,我已经阅读了这个网站上的所有教程和内容,这应该是有效的。我在以前的一个项目中尝试过这样做,得到了同样的结果,所以我错过了比打字更高级的东西 搜索窗口小部件出现并似乎正在工作。但是,当提交搜索时,不会发生任何事情。它就在那里。我尝试重写onNewIntent()和onSearchRequested()以添加Log.d()输出,以查看是否调用过该代码。我也在那里添加了断点。。。没有什么!这似乎说明了清单中的意图是如何建立的,但在我看来是正确的。也许另一双眼睛可以发现一些东西 manifest.
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:launchMode="singleTop"
android:theme="@style/AppTheme" >
<meta-data android:name="android.app.default_searchable"
android:value=".DeckView" />
<activity
android:name=".DeckView"
android:label="@string/title_activity_deck_view" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:value="@xml/searchable" />
</activity>
<activity
任何帮助或见解都将不胜感激。我想我从来没有像现在这样撞到过砖墙,我甚至不知道如何调试它 您的DeckView活动是否扩展了
ActionBarActivity
?您是否有一个用于搜索和搜索reslut的活动?@adavis。不,它只是延伸Activity@Aryan-有点。.DeckView活动在SQL数据库中放置一个表示虚拟组(dbh.createSearchDeck)的条目,并加载另一个显示结果的活动(.ShowCard)。这可以绕过小部件正常工作。从未调用该代码。好的,您可能需要扩展ActionBarActivity
,请参阅此处的详细信息:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/search" >
</searchable>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/action_settings"
android:showAsAction="ifRoom"/>
<item android:id="@+id/action_dbops" android:title="@string/maintenance"
android:icon="@android:drawable/ic_menu_more"
android:orderInCategory="70" android:showAsAction="ifRoom" />
<item android:id="@+id/menu_search" android:title="@string/search"
android:icon="@android:drawable/ic_menu_search"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="collapseActionView|ifRoom" />
<item android:id="@+id/action_search" android:title="@string/search"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="never" />
<item android:id="@+id/action_help" android:title="@string/help"
android:icon="@android:drawable/ic_menu_help"
android:orderInCategory="25" android:showAsAction="ifRoom" />
</menu>
@Override
public void onNewIntent(Intent intent) {
Log.d("TRACE", "New Intent!");
setIntent(intent);
handleIntent(intent);
}
@Override
public boolean onSearchRequested() {
Log.d("TRACE", "ONSEARCHREQUESTED");
Bundle appData = new Bundle();
appData.putLong("deck",4);
startSearch(null, false, appData, false);
return true;
}
private void handleIntent(Intent intent)
{
if (intent == null)
return;
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
long deck;
Log.d("TRACE","ITS A SEARCH!");
String query = intent.getStringExtra(SearchManager.QUERY);
DeckDbHelper dbh = new DeckDbHelper (this,this);
Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA);
if (appData != null) {
deck = appData.getLong("deck");
} else
deck = 4;
long id = dbh.createSearchDeck(deck,query);
Intent newintent = new Intent(this, ShowCard.class);
intent.putExtra("deckid", String.valueOf(id));
startActivity(newintent);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the options menu from XML
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.deck_view, menu);
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, 0, null);
} else if (id == R.id.action_search) {
search_options();
} else if (id == R.id.action_dbops) {
Intent intent = new Intent(this, DatabaseOps.class);
startActivityForResult(intent, 0, null);
} else if (id == R.id.action_help) {
Intent intent = new Intent(this, ShowCard.class);
intent.putExtra("deckid", String.valueOf(DeckDbHelper.DECK_HELP));
intent.putExtra("title", "DeckList");
startActivity(intent);
}
setTarget(null);
return super.onOptionsItemSelected(item);
}