为什么Android SearchWidget不发送意图?

为什么Android SearchWidget不发送意图?,android,android-intent,searchview,Android,Android Intent,Searchview,好的,我已经阅读了这个网站上的所有教程和内容,这应该是有效的。我在以前的一个项目中尝试过这样做,得到了同样的结果,所以我错过了比打字更高级的东西 搜索窗口小部件出现并似乎正在工作。但是,当提交搜索时,不会发生任何事情。它就在那里。我尝试重写onNewIntent()和onSearchRequested()以添加Log.d()输出,以查看是否调用过该代码。我也在那里添加了断点。。。没有什么!这似乎说明了清单中的意图是如何建立的,但在我看来是正确的。也许另一双眼睛可以发现一些东西 manifest.

好的,我已经阅读了这个网站上的所有教程和内容,这应该是有效的。我在以前的一个项目中尝试过这样做,得到了同样的结果,所以我错过了比打字更高级的东西

搜索窗口小部件出现并似乎正在工作。但是,当提交搜索时,不会发生任何事情。它就在那里。我尝试重写onNewIntent()和onSearchRequested()以添加Log.d()输出,以查看是否调用过该代码。我也在那里添加了断点。。。没有什么!这似乎说明了清单中的意图是如何建立的,但在我看来是正确的。也许另一双眼睛可以发现一些东西

manifest.xml代码段

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