android - 更改 listView 的可见性
Posted
技术标签:
【中文标题】android - 更改 listView 的可见性【英文标题】:android - change visibility of 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 仍然消失了...
【参考方案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 你有演示项目吗?你能分享给我吗?我会尝试检查您的代码
让我们continue this discussion in chat.
@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试试这个 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; );以上是关于android - 更改 listView 的可见性的主要内容,如果未能解决你的问题,请参考以下文章
如何在listview android中仅更改第二个单元格的背景颜色