Как получить доступ к SearchView / MenuItem из Activity из другого Activity / View, используя MVP? - PullRequest
0 голосов
/ 09 июля 2019

Я использую шаблон MVP в своем проекте и пытаюсь получить доступ к SearchView, который находится в MainActivity Menu, из View. Представление - это FrameLayout внутри MainActivity, где у меня есть RecyclerView, и когда я щелкаю строку, я хочу свернуть SearchView, но я не знаю, как это сделать правильно. Я знаю, как свернуть его из MainActivity, но не из View.

Здесь я создаю меню в MainActivity

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_activity_user_list, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);

    SearchView searchView = (SearchView) searchItem.getActionView();

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

        @Override
        public boolean onQueryTextChange(String s) {
            mUserView.mUsersAdapter.getFilter().filter(s);

            return false;
        }
    });

    searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            mUserView.mScrollListener.searchViewFiltering = true;
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            mUserView.mScrollListener.searchViewFiltering = false;
            return true;
        }
    });

    return true;
}

menumain.xml

<item android:id="@+id/action_search"
    android:icon="@drawable/ic_search_24dp"
    android:title="@string/search_menu"
    app:showAsAction="ifRoom|collapseActionView"
    app:actionViewClass="androidx.appcompat.widget.SearchView" />

и метод OnClick в RecyclerView View Holder, где я хочу вызвать SearchView, этот метод помещается в UsersView.java (FrameLayout)

private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        //Here I want to collapse the SearchView

        User mUser = (User) view.getTag();

        Context context = view.getContext();
        Intent intent = new Intent(context, UserDetailActivity.class);
        intent.putExtra("userObj", mUser);

        context.startActivity(intent);
    }
};
...