我正在尝试在onSearchClick
的SearchView
侦听器中启动片段。片段开始时很好,但是在一两秒钟之内,打开的SearchView(默认情况下图标化)会自动再次折叠,并且在SearchView上单击鼠标既不会调用onClose也不会调用onClick。另外我还要注意,我没有使用ActionBar,而是使用了自定义的工具栏,因此不能使用任何MenuItem
方法。
这是SearchView活动中的代码:
SearchView main_search = findViewById(R.id.testing_search);
main_search.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
search_fragment = new GroupFragment();
getSupportFragmentManager().beginTransaction().add(R.id.main_activity, search_fragment).commit();
}
});
main_search.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
return false;
}
});
以及布局中的SearchView
:
<androidx.appcompat.widget.SearchView
android:id="@+id/testing_search"
android:layout_width="match_parent"
android:layout_height="65dp"
android:focusable="false"
android:layoutDirection="rtl"
app:defaultQueryHint="Search by course name or code"
app:iconifiedByDefault="true"
app:actionViewClass="android.support.v7.widget.SearchView"
app:layout_constraintBottom_toBottomOf="@id/main_toolbar"
app:layout_constraintTop_toTopOf="@id/main_toolbar"
app:layout_constraintRight_toRightOf="@id/main_toolbar"/>
[我想出了办法,以防有人遇到这个问题-只需将SearchView的onClose
和onSearchClick
侦听器移到要添加的片段的onCreateView
方法中即可。这样,焦点就不会从SearchView切换到Fragment,因为SearchView包含在Fragment中。只需从父活动正常启动Fragment。
片段onCreateView
:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val v = inflater.inflate(R.layout.activity_main, container, false)
val search : SearchView = v.findViewById(R.id.testing_search)
val toolbar : Toolbar = v.findViewById(R.id.main_toolbar)
search.setOnSearchClickListener {
//Do whatever on click
}
search.setOnCloseListener {
//Do whatever on close
//this boolean is required
false
}
return v
}