searchview oncreateoptions方法无法使用JSON(Android)中的对象

时间:2017-01-31 05:30:16

标签: android searchview

我正在开发一个简单的应用程序,它使用公共数据(JSON)获取数据并在列表视图中显示它们。它工作正常。现在我想实现搜索视图'在行动吧。所以我按照youtube教程(https://www.youtube.com/watch?v=hoEY2n8CCSk)完成了他的工作。虽然搜索视图按照我的意图出现,但搜索功能根本不起作用。我认为youtube教程只过滤了字符串,但我需要通过每个对象的名称变量来过滤列表视图中的对象。使用getName()方法。我该怎么办?

MainActivity.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_search, menu);
    MenuItem item = menu.findItem(R.id.menuSearch);
    SearchView searchView = (SearchView) item.getActionView();

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            mAdapter.getFilter().filter(newText);
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

AndroidMenifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   <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/myAppTheme">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
   </application>

</manifest>

menu_search.xml

<item android:id="@+id/menuSearch"
    android:title="Search"
    android:icon="@android:drawable/ic_menu_search"
    app:actionViewClass="android.widget.SearchView"
    app:showAsAction="always">

</item>

1 个答案:

答案 0 :(得分:0)

试试这种方式..

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.menuSearch) {
        SearchView searchView = (SearchView) item.getActionView();

        searchView
                .setOnQueryTextListener(new SearchView.OnQueryTextListener() {

                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        return false;
                    }

                    @Override
                    public boolean onQueryTextChange(String newText) {
                        mAdapter.getFilter().filter(newText);
                        return false;
                    }
                });
        return true;
    }
    return super.onOptionsItemSelected(item);
}