Breaking News

How to Highlight selected item in List View and create Contextual menu



In Android Programming, ListView is used to show something in your activity in a manner.

Some developers as an app need, use a custom list like with TextView, and an Image Button.

But with ListView we use a Contextual menu to handle Long Click on that ListView,
like Select All and Delete all method to use.

Today We Create a Contextual menu in Android with ListView and Select all Button with that.

Create a ListView and find that id. Also, we create an ArrayList and Array adapter to set up our List view. Also, create an int variable called multicount = 0.
 public class Srchvw extends AppCompatActivity {   
     
   ListView searchlist;   
   int multicount = 0;   
   ArrayList<String> list = new ArrayList<>();   
   ArrayAdapter adapter;   
  @Override   
   protected void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.activity_srchvw);   
    searchlist = findViewById(R.id.SearchListView);   

Then create a custom List. create a resource file with only a text view. and name it as a searchcustomlist
 <?xml version="1.0" encoding="utf-8"?>  
   
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"  
   android:id="@android:id/text1"  
   android:layout_width="match_parent"  
   android:layout_height="wrap_content"  
   android:textAppearance="?android:attr/textAppearanceListItemSmall"  
   android:gravity="center_vertical"  
   android:paddingLeft="3dp"  
   android:paddingRight="3dp"  
   android:background="@drawable/multiple_select"  
   android:minHeight="?android:attr/listPreferredItemHeightSmall" />  
   

Here We create a Background Drawable file to change selected items color. Create a Drawable Resource file and name it as a multiple_select
 <selector xmlns:android="http://schemas.android.com/apk/res/android">  
   <item android:state_pressed="true" android:state_activated="true" android:drawable="@color/black_overlay" />  
   <item android:state_activated="true" android:drawable="@color/colorPrimary" />  
   <item android:state_enabled="true" android:drawable="@android:color/transparent" />  
   <item android:drawable="@color/blue_semi_transparent" />  
   
 </selector>  

now add some values to your custom list and set up your adapter with this custom list.
 list.add("Harpreet");  
     list.add("Studio");  
     list.add("hello");  
     list.add("today");  
     list.add("we create");  
     list.add("Searchview");  
     list.add("search");  
     list.add("something");  
     list.add("in your list");  
   
     adapter = new ArrayAdapter<String>(this, R.layout.searchcustomlist,list);  
     searchlist.setAdapter(adapter);  


Now we create a menu file to show in our contextual menu
create a new menu resource file and name it as a srch_context_menu
 <?xml version="1.0" encoding="utf-8"?>  
 <menu xmlns:android="http://schemas.android.com/apk/res/android">  
   
   <item  
     android:id="@+id/select"  
     android:title="Select_ALL"  
     />  
 </menu>  

now we create a contextual menu
 searchlist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        searchlist.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode actionMode, int i, long l, boolean b) {
                 multicount = searchlist.getCheckedItemCount();
                actionMode.setTitle(multicount + " items selected");
                if(searchlist.isItemChecked(i))
                {
                    multicount = multicount+1;
                }
                else
                {
                    multicount = multicount - 1;
                }

            }

            @Override
            public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {

                MenuInflater inflater = actionMode.getMenuInflater();
                inflater.inflate(R.menu.srch_context_menu,menu);


                return true;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
                switch (menuItem.getItemId())
                {

                    case R.id.select:

                        for ( int i=0; i < searchlist.getAdapter().getCount(); i++)
                        {
                            searchlist.setItemChecked(i, true);
                        }
                        return true;

                }
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode actionMode) {

            }
        });

No comments