Simon
Simon

Reputation: 471

android - change visibility of listView

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

Answers (4)

Linh
Linh

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

KKSINGLA
KKSINGLA

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

Alan
Alan

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

Jeco Alviano
Jeco Alviano

Reputation: 29

try this listview.visible = false; or you can change in listview properties.. find visible and set false

Upvotes: 0

Related Questions