簡體   English   中英

片段中的SearchView(活動中的膨脹菜單)

[英]SearchView in fragment (inflated menu in activity)

我在SearchView.OnQueryTextListener上得到了NPE。

/res/menu/order_toolbar.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/order_menu_search"
    android:icon="@drawable/ic_search"
    android:title="@string/order_menu_search"
    app:actionViewClass="android.support.widget.v7.SearchView"
    app:showAsAction="ifRoom|withText" />

<item
    android:id="@+id/order_menu_checkmark"
    android:icon="@drawable/ic_checkmark"
    android:title="@string/order_toolbar"
    app:showAsAction="ifRoom|withText" />

ActivityOrder.java

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.order_toolbar, menu);
    mMenuCheckmark = menu.findItem(R.id.order_menu_checkmark);
    mMenuCheckmark.setVisible(false);
    return super.onCreateOptionsMenu(menu);
}

FragmentOrder.java

    @Override
public void onPrepareOptionsMenu(Menu menu){
    MenuItem menuItem = menu.findItem(R.id.order_menu_search);
    SearchView searchView = (SearchView) menuItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
        Toast.makeText(getActivity(), "" +newText, Toast.LENGTH_SHORT).show();
            return false;
        }
    });
}

我在Activity放大菜單(我需要隱藏對勾標記,然后在用戶進行一些輸入后將其啟用,所有邏輯都在活動中),在Fragment中,我具有RecyclerView並且需要實現搜索(在工具欄中) )。 因此,基本上,我只需要訪問該SearchView INSIDE FRAGMENT。 我一直在嘗試尋找任何東西,但無濟於事,如果我將menu fragment放大,那么toolbar圖標會加倍。

setHasOptionsMenu(true);

已添加到onCreate

我也嘗試過此操作:1.在片段中添加菜單(在活動中刪除onCreateOptionsMenu)2.將menuItem(檢查標記)傳遞回活動槽接口,以便我可以訪問檢查標記3.如果我在searchview上設置了偵聽器,仍會得到NPE

我在片段中制作選項菜單。 像這樣,

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
...
setHasOptionsMenu(true);
...
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.fragment_menu, menu);
    menu.findItem(R.id.menu_1).setIcon(ContextCompat.getDrawable(activity, R.drawable.ic_bar_search));
    searchView = (SearchView) menu.findItem(R.id.menu_1).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            return false;
        }
    });
    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            return false;
        }
    });
....
}  

不確定,您可以從onCreateOptionsMenu調用“ searchView.setOnQueryTextListener”。

解決了:

   mMenuSearch = (SearchView) menu.findItem(R.id.order_menu_search).getActionView();
        mMenuSearch.setOnQueryTextListener(this);

添加了在Fragment上implements SearchView.OnQueryTextListener以及2個新的Override方法onQueryTextSubmitonQueryTextChanged

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM