Я использую шаблон 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);
}
};