android - 改变 listView 的可见性

android - change visibility of listView

我有一个以字符串形式显示国家/地区的列表视图。

lv = (ListView)findViewById(R.id.listViewCountry);
        ArrayList<String> arrayCountry = new ArrayList<>();
        arrayCountry.addAll(Arrays.asList(getResources().getStringArray(R.array.array_country)));

        adapter = new ArrayAdapter<>(
                MainActivity.this,
                android.R.layout.simple_list_item_1,
                arrayCountry);
        lv.setAdapter(adapter);

我在工具栏上有一个 searchView。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        MenuItem item = menu.findItem(menuSearch);
        SearchView searchView = (SearchView)item.getActionView();

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                adapter.getFilter().filter(newText);
                return false;
            }
        });


        return super.onCreateOptionsMenu(menu);
    }

当应用程序启动时,我需要我的 listView 的可见性消失,当我在工具栏中按搜索时,listView 应该是可见的。

我必须对 onOptionsItemSelected

做任何事情吗
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == menuSearch) {
            lv.setVisibility(View.VISIBLE);

            return true;
        }

        return super.onOptionsItemSelected(item);
    }

但是我的代码不工作...

main.xml...

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/menuSearch"
        android:title="Search"
        android:icon="@android:drawable/ic_menu_search"
        app:actionViewClass="android.widget.SearchView"
        app:showAsAction="always">
    </item>
</menu>

试试这个 listview.visible = 假; 或者您可以更改列表视图属性.. 找到可见并设置 false

如果你想将视图设置为不可见,你可以尝试:

lv.setVisibility(View.INVISIBLE);

lv.setVisibility(View.GONE);

对于你的情况,你可以在onCreate中将lv设置为不可见, 并将列表视图设置为在 onQueryTextSubmit 中可见。

  @Override
  public void onCreate() {
     //... others
     lv.setVisibility(View.INVISIBLE);
  }


  @Override
  public boolean onQueryTextSubmit(String query) {
       lv.setVisibility(View.VISIBLE);
       return false;
  }

关闭监听器的设置:

searchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                lv.setVisibility(View.GONE);
                return false;
            }
        });

为您的 SearchView

使用 setOnSearchClickListener
@Override
public void onCreate() {
     ...
     yourListView.setVisibility(View.GONE); // or use View.INVISIBLE 
}
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
     SearchView searchView = (SearchView)item.getActionView();
     searchView.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            lv.setVisibility(View.VISIBLE);
        }
    });
}

添加:

item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener()
{
    @Override 
    public boolean onMenuItemClick(MenuItem menuItem) { 
         Toast.makeText(this, "Click", Toast.LENGTH_SHORT).show();
         lv.setVisibility(View.VISIBLE); return false;
    }
});

在 onCreateOptionsMenu