Reputation: 471
I have a listView with countries as Strings.
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);
I have a searchView on the toolbar.
@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);
}
When the app starts, I need my Visibility of my listView GONE and when I press search in the toolbar the listView should be VISIBLE.
Do I have to do anything with 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);
}
But my code is not working...
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>
Upvotes: 1
Views: 2533
Reputation: 61019
Use setOnSearchClickListener
for your 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);
}
});
}
Upvotes: 2
Reputation: 1344
Add:
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;
}
});
in onCreateOptionsMenu
Upvotes: 0
Reputation: 296
if you want to set a view to be invisible, you may try:
lv.setVisibility(View.INVISIBLE);
or
lv.setVisibility(View.GONE);
In your case, you can set the lv to be invisible in onCreate, and set listview to be visible in onQueryTextSubmit.
@Override
public void onCreate() {
//... others
lv.setVisibility(View.INVISIBLE);
}
@Override
public boolean onQueryTextSubmit(String query) {
lv.setVisibility(View.VISIBLE);
return false;
}
Setup on close listener:
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
lv.setVisibility(View.GONE);
return false;
}
});
Upvotes: 1
Reputation: 29
try this listview.visible = false; or you can change in listview properties.. find visible and set false
Upvotes: 0