1

即使在阅读了示例和一些关于 SO 的问题之后,我仍然不明白为什么我的 searchwidget 什么都不做......!

Manifest.xml 简化:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


     <activity android:name=".ResultActivity" >
        <intent-filter>
          <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                   android:resource="@xml/searchable"/>
        </activity>

    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >


    </activity>

xml/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" >
</searchable>

menu/activity_main.xml(操作栏中的搜索小部件..):

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_settings"
    android:title="@string/menu_settings"
    android:orderInCategory="100"
    android:showAsAction="never" />

<item android:id="@+id/menu_search"
      android:title="@string/menu_search"
      android:icon="@drawable/ic_menu_search"
      android:showAsAction="ifRoom"
      android:actionViewClass="android.widget.SearchView" />

应该进行搜索的 MainActivity:

public class MainActivity extends Activity implements OnClickListener {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the options menu from XML
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main, 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();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
    searchView.setSubmitButtonEnabled(true);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_settings:
            // app icon in action bar clicked; go parameters
            Intent intent = new Intent(this, ParametersActivity.class);
            //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            break;
        case R.id.menu_search:
            onSearchRequested();
            return true;
    }
    return true;
}

}

和结果活动:

public class ResultActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search_result);
     // Get the intent, verify the action and get the query
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
      Toast.makeText(this, "QUERY : " + query, Toast.LENGTH_SHORT).show();
    }


}

我已遵循 API 指南,但我看不出我的错误在哪里,如果有人可以提供帮助,我将不胜感激!

谢谢。

尼科。

4

0 回答 0