【问题标题】:android - change visibility of listViewandroid - 更改 listView 的可见性
【发布时间】:2017-07-25 19:34:36
【问题描述】:

我有一个列表视图,其中国家/地区为字符串。

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 GONE 的可见性,当我在工具栏中按搜索时,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>

【问题讨论】:

  • 在列表视图中设置空文本视图,如果列表为空,它将显示空消息或无消息
  • 我认为你应该把代码让列表视图在onOptionsItemSelected中可见?
  • @nabillondon,是的,我认为这对..但是我所做的没有工作..
  • @Simon 可能没有调用 onOptionsItemSelected,您的 searchview xml 定义中有 app:showAsAction="always|collapseActionView" 吗?
  • 做到了,但结果为负.. listview 仍然消失了...

标签: android listview visibility


【解决方案1】:

setOnSearchClickListener 用作您的SearchView

@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);
        }
    });
}

【讨论】:

  • @Simon 你能解释更多关于not working 的信息吗?我认为它应该工作
  • @Simon 我仍然不知道为什么会这样。尝试setOnTouchListener 而不是setOnClickListener
  • @Simon 你有演示项目吗?你能分享给我吗?我会尝试检查您的代码
  • @Simon 我已经更新了我的答案,它可以在你的演示项目中使用,请检查一下
【解决方案2】:

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

lv.setVisibility(View.INVISIBLE);

lv.setVisibility(View.GONE);

在您的情况下,您可以在 onCreate 中将 lv 设置为不可见, 并将 listview 设置为在 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;
            }
        });

【讨论】:

  • 先生,当我输入单词并按下搜索按钮时,此代码使 listView 可见。但我真正需要的是,当我在工具栏中按下搜索时,listView 应该是可见的。
  • 当我关闭 searchView 时,listView 是可见的......当我关闭 searchVierw 时,我怎样才能让它消失......
  • @Simon 你的问题解决了吗?如果您需要任何帮助,请告诉我。
  • 您可以考虑存储一个ArrayList,用于存储最近搜索的项目。当用户单击“搜索”时,搜索它 -> 当结果返回时添加到数组列表中。当然,您可以通过检查 arraylist.size() 来限制最近搜索的项目数
  • 当我按下返回按钮时,我需要关闭 searchView...我尝试了很多概念,但似乎不起作用...请帮助我...
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    添加:

    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 中

    【讨论】:

    • 我无法将 toast 添加到 onClickListner 方法...它显示 `cannot reslove method makeText'...
    • 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; } });
    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多