How to do multiselect functionality on grid view items on tap?

后端 未结 1 1320
北恋
北恋 2021-01-15 16:30

I have made grid view in which I have to do multiple selection of items.But I dont want long tap functionality.I simply want that on single tap the multiple items can be sel

1条回答
  •  野的像风
    2021-01-15 17:27

    This is a rough solution of what you need to do:

    1) Maintain a list which will contain the positions of currently selected items.

    private ArrayList mSelected = new ArrayList();
    

    When you click on item (select item), add it to the list. When you click on item again (deselect item), remove from the list.

        public void onItemSelect(AdapterView parent, View v, int pos, long id) {
            Integer position = new Integer(pos);
            if(mSelected.contains(position)) {
                mSelected.remove(position); // remove item from list
                // update view (v) state here
                // eg: remove highlight
            }
            else {
                mSelected.add(position); // add item to list
                // update view (v) state here
                // eg: add highlight
            } 
        }
    

    2) You have to update the view, to show if item is selected or not, I will add code (+comments) on where to do that.

    3) In the end, the list will contain all items which have been selected.

    Here is the code which shows you where to place the above code.

    Code:

    public class FragmentOrder extends Fragment {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
            //View view = inflater.inflate(R.layout.g, null);
            View view = inflater.inflate(R.layout.gridview,null);
            final GridView listView = (GridView) view.findViewById(R.id.mainGrid);
            final OrderGridViewAdapter adapter = new OrderGridViewAdapter(MainActivity.this)
            listView.setAdapter(adapter);
            //int setSelected = 0;
            listView.setSelected(true);
    
            listView.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
                    adapter.onItemSelect(arg0, arg1, arg2, arg3);
                }
            });
            return view;
        }
    }
    

    Adapter:

    public class OrderGridViewAdapter extends BaseAdapter{
        private Context MContext;
        private ArrayList mSelected = new ArrayList();
    
        public OrderGridViewAdapter(Context C){
            MContext = C;
        }
    
    
        @Override
        public int getCount() {
            return mThumbIds.length;
        }
    
        @Override
        public Object getItem(int position) {
            return null;
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
    
        public void onItemSelect(AdapterView parent, View v, int pos, long id) {
            Integer position = new Integer(pos);
            if(mSelected.contains(position)) {
                mSelected.remove(position);
                // update view (v) state here
                // eg: remove highlight
            }
            else {
                mSelected.add(position);
                // update view (v) state here
                // eg: add highlight
            } 
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
    
            View myView;
    
    
            LayoutInflater inflater = (LayoutInflater)MContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);           
            myView = inflater.inflate(R.layout.grid_items_ontap, null);
    
    
            // Add The Image!!!           
            ImageView iv = (ImageView)myView.findViewById(R.id.grid_item_image_OnTap);
            iv.setImageResource(mThumbIds[position]);
    
    
            // Add The Text!!!
            TextView tv = (TextView)myView.findViewById(R.id.grid_item_text_onTap);
            tv.setText(names[position] );
    
            // Set view highlight here, based on if it is selected or not.. 
            if(mSelected.contains(position)) { 
                // update view (v) state here
                // eg: add highlight
            }
            else {
                // update view (v) state here
                // eg: remove highlight
            }
    
    
            return myView;
        }
    
    
        private Integer[] mThumbIds = {
                R.drawable.car, R.drawable.car,
                R.drawable.car, R.drawable.car,
                R.drawable.car,R.drawable.car,R.drawable.car,R.drawable.car, R.drawable.car,
                R.drawable.car, R.drawable.car,
                R.drawable.car,R.drawable.car,R.drawable.car
        };
    
        private String[] names={"ab","cd","ef","gh","ij","kl","mn","","","","","","",""};
     }
    

    Update: To update the view, you should read about how to change properties of the view programatically. For example, if you want to change the background color:

    v.setBackgroundColor(Color.parseColor("#000000")); // change to black
    

    0 讨论(0)
提交回复
热议问题