我有一个带有searchView图标的actionBar。我点击searchView图标,出现softInputMode键盘,我的ListView出现用于搜索。但是,当您关闭searchView时,searchView会关闭,但是当searchView关闭时,我无法让ListView也关闭。
这是我在activity_maps.xml
中的ListView代码<ListView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#ffffff"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
tools:layout_editor_absoluteX="0dp"
/>
MapsActivity.java
ArrayAdapter<String> adapter;
@Override
public boolean onCreateOptionsMenu(final Menu menu){
final ListView lv = (ListView) findViewById(R.id.list);
ArrayList<String> arrayList = new ArrayList<>();
arrayList.addAll(Arrays.asList(getResources().getStringArray(R.array.array_states_trial)));
adapter = new ArrayAdapter<>(MapsActivity.this, android.R.layout.simple_list_item_1, arrayList);
lv.setAdapter(adapter);
lv.setVisibility(View.INVISIBLE);
因此,最初在MapsActivity.java加载时,我不希望立即显示ListView。
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lv.setVisibility(View.VISIBLE);
}
});
我希望listView显示何时单击searchView并弹出键盘。
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
lv.setVisibility(View.INVISIBLE);
return false;
}
});
在上面的代码中,我希望listView关闭,消失,不可见,但它不会。
btw我指的是关闭searchView时附带的actionBar中的“Back”按钮。
当searchView和键盘关闭时,我希望ListView也关闭,但由于某种原因,代码无法识别,listView永远不会关闭。
如何关闭ListView?
答案 0 :(得分:1)
您只需在活动中覆盖此方法:
@Override
public void onBackPressed() {
if(lv.getVisibility()==View.VISIBLE){
lv.setVisibility(View.INVISIBLE);
return;
}
super.onBackPressed();
}
希望这有帮助。
答案 1 :(得分:0)
根据Android参考,如果要覆盖清除文本字段和解除文本字段的默认行为,请尝试返回true,否则返回false。
查看此链接: https://developer.android.com/reference/android/widget/SearchView.OnCloseListener.html
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
lv.setVisibility(View.INVISIBLE);
return true;//Should work.
}
});