Android,当按下“后退”按钮关闭searchView时如何关闭ListView

时间:2017-12-04 19:17:49

标签: android listview listener searchview

我有一个带有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?

2 个答案:

答案 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.
    }
});