操作栏上的SearchView无法正常工作

时间:2015-06-26 14:52:15

标签: android search

我的SearchView无法正常工作。我的操作栏中有一个搜索小部件但是当我输入一些单词时,没有显示的结果。这是我的代码。

请问有人可以帮忙吗?

Android Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.szen95.meddict" >

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/DictionaryTheme"
        android:launchMode="singleTop"
        android:configChanges="orientation|screenSize">
        <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>

    <activity
        android:name=".Details"
        android:label="@string/title_activity_details"
        android:parentActivityName=".MainActivity" >
    </activity>

    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.szen95.meddict.MainActivity" >
    </meta-data>


</application>

MainActivity:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new SearchFragment())
                .commit();
    }

    getSupportActionBar().setElevation(0f);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);

    SearchManager searchManager = (SearchManager) getSystemService( Context.SEARCH_SERVICE );
    SearchView searchView = (SearchView) menu.findItem( R.id.search_bar ).getActionView();

    searchView.setSearchableInfo( searchManager.getSearchableInfo( getComponentName() ) );


    return super.onCreateOptionsMenu(menu);
}


@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.
               return super.onOptionsItemSelected(item);
    }

SearchFragment:

 public class SearchFragment extends ListFragment {

private ProgressDialog pDialog;

// URL to get contacts JSON
private static String url = "http://dailymed.nlm.nih.gov/dailymed/services/v2/drugclasses.json";

// JSON Node names
private static final String TAG_DATA = "data";
private static final String TAG_CODE = "code";
private static final String TAG_CODING_SYSTEM = "codingSystem";
private static final String TAG_TYPE = "type";
private static final String TAG_NAME = "name";


// contacts JSONArray
JSONArray data = null;

public SearchFragment() {
}

ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();

public View onCreateView(LayoutInflater inflater,
                         ViewGroup container,
                         Bundle savedInstanceState) {

    // Retrieving the currently selected item number

    // Creating view correspoding to the fragment
    View v = inflater.inflate(R.layout.fragment_main, container, false);

    new GetData().execute();

    return v;
}

/**
 * Async task class to get json by making HTTP call
 * */
private class GetData extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        pDialog = new ProgressDialog(getActivity());
        //
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }
    @Override
    protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

                // Getting JSON Array node
                data = jsonObj.getJSONArray(TAG_DATA);

                // looping through All Contacts
                for (int i = 0; i < data.length(); i++) {
                    JSONObject c = data.getJSONObject(i);

                    String code = c.getString(TAG_CODE);
                    String codingSystem = c.getString(TAG_CODING_SYSTEM);
                    String type = c.getString(TAG_TYPE);
                    String name = c.getString(TAG_NAME);


                    // tmp hashmap for single contact
                    HashMap<String, String> data = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    data.put(TAG_CODE, code);
                    data.put(TAG_CODING_SYSTEM, codingSystem);
                    data.put(TAG_TYPE, type);
                    data.put(TAG_NAME, name);

                    // adding contact to contact list
                    dataList.add(data);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
        /**
         * Updating parsed JSON data into ListView
         * */
        SimpleAdapter adapter = new SimpleAdapter(getActivity(), dataList,
                R.layout.list_item_search, new String[] { TAG_NAME, TAG_CODE}, new int[] { R.id.name,
                R.id.code});

        setListAdapter(adapter);
    }

}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    setHasOptionsMenu(true);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_refresh) {

        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

0 个答案:

没有答案