【问题标题】:Android, how to close ListView when "Back" button pressed to close searchViewAndroid,当按下“返回”按钮关闭searchView时如何关闭ListView
【发布时间】:2017-12-04 19:17:48
【问题描述】:

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

        }
    });

我希望在单击打开 searchView 并弹出键盘时显示 listView。

    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {

               lv.setVisibility(View.INVISIBLE);

            return false;
        }
    });

在上面的代码中,我希望 listView 关闭、消失、不可见,但它没有。

顺便说一句,我指的是关闭 searchView 附带的 actionBar 中的“返回”按钮。

当 searchView 和键盘关闭时,我希望 ListView 也关闭,但由于某种原因无法识别代码并且 listView 永远不会关闭。

如何关闭 ListView?

【问题讨论】:

标签: android listview listener searchview


【解决方案1】:

您可以简单地在您的活动中覆盖此方法:

@Override
public void onBackPressed() {
    if(lv.getVisibility()==View.VISIBLE){
      lv.setVisibility(View.INVISIBLE);
      return;
    }
    super.onBackPressed();
}

希望这会有所帮助。

【讨论】:

  • 这在按下 Android 后退按钮时有效。但是我想让它当您单击 searchView 并单击 menu_main.xml 中 app:showAsAction="ifRoom|collapseActionView" 附带的后退按钮时,listView 在 searchView 关闭时关闭。
  • 你知道一个可以让 searchView 的后退按钮关闭 listView 而不仅仅是 Android 的后退按钮的代码吗?目前searchView的后退按钮只是关闭searchView,但我也希望它同时关闭listView。
【解决方案2】:

根据 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.
    }
});

【讨论】:

    猜你喜欢
    • 2017-09-27
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多