Android 在ActionBar中切换小部件时失去功能

Android 在ActionBar中切换小部件时失去功能,android,Android,我有一种奇怪的ActionBar行为。在我的操作栏中,我有一个文本视图,它向列表视图添加单词,一个删除按钮,它删除所有内容,还有一个搜索视图,它过滤我的列表视图。问题是,当我启动我的应用程序时,我可以添加单词、删除它们并使用SearchView。但在使用SearchView之后,我无法添加和删除单词,只有在我完全重新启动我的应用程序之后。请帮我弄清楚,我花了很多时间,但没有运气 以下是截图: 这是我的密码: public class MainActivity extends AppCo

我有一种奇怪的ActionBar行为。在我的操作栏中,我有一个文本视图,它向列表视图添加单词,一个删除按钮,它删除所有内容,还有一个搜索视图,它过滤我的列表视图。问题是,当我启动我的应用程序时,我可以添加单词、删除它们并使用SearchView。但在使用SearchView之后,我无法添加和删除单词,只有在我完全重新启动我的应用程序之后。请帮我弄清楚,我花了很多时间,但没有运气

以下是截图:

这是我的密码:

    public class MainActivity extends AppCompatActivity {

    ListView listView;
    ArrayList<String> arraylist;
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        arraylist = new ArrayList<String>();

        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arraylist);
        listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        /** Create an option menu from res/menu/items.xml */
        getMenuInflater().inflate(R.menu.main_menu, menu);
        /** Get the action view of the menu item whose id is search */
        View v = (View) menu.findItem(R.id.action_submit).getActionView();

        /** Get the edit text from the action view */
        final EditText txtSearch = (EditText) v.findViewById(R.id.editText);
        final Button button = (Button) v.findViewById(R.id.buttonSave);

        /** Setting an action listener */

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                arraylist.add(txtSearch.getText().toString());
                adapter.notifyDataSetChanged();
            }
        });

        MenuItem pinMenuItem = menu.findItem(R.id.delete_all);

        pinMenuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                arraylist.clear();
                adapter.notifyDataSetChanged();
                return true;
            }
        });


        MenuItem ourSearchItem = menu.findItem(R.id.menu_item_search);

        SearchView sv = (SearchView) ourSearchItem.getActionView();

        sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {

                adapter.getFilter().filter(newText);
                if (Arrays.asList(arraylist).contains(newText)){
                    Toast.makeText(getApplicationContext(), "This word is in the list", Toast.LENGTH_SHORT).show();
                }
                return false;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }
}
add_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_submit"
        app:actionLayout="@layout/add_layout"
        app:showAsAction="ifRoom|collapseActionView"
        android:title="Add"
        android:icon="@drawable/ic_action_content_add"/>

    <item
        android:id="@+id/delete_all"
        android:title="Delete all"
        app:showAsAction="always"
        android:icon="@drawable/ic_action_action_delete"
        />

    <item
        app:showAsAction="ifRoom|collapseActionView"
        android:icon="@drawable/ic_action_action_pageview"
        android:id="@+id/menu_item_search"
        app:actionViewClass="android.widget.SearchView"
        android:title="Search"
        android:iconifiedByDefault="true"/>

</menu>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_toRightOf="@+id/buttonSave"
        android:layout_toEndOf="@+id/buttonSave" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:id="@+id/buttonSave"
        android:layout_alignBottom="@+id/editText" />

</RelativeLayout>


对我的代码进行了重构,将所有变量设置为类变量,并将它们设置为私有(但这并不重要,只是一个好的实践)。现在一切正常。

Hi@javastarter,您应该接受自己的答案,因为它解决了您的问题。干得好