在android上下文菜单中添加多个选择和删除功能

时间:2014-08-02 04:18:00

标签: android listview contextmenu multipleselection

我对Android很新,我正在尝试为 listView 添加上下文菜单。所以我按照android开发者页面中显示的指南进行操作如果我长按 listView 中的项目,我会在操作栏中显示上下文菜单。我要添加的是,当我选择多个项目时,我想在上下文菜单中显示计数。此外,当我点击上下文菜单中的bin图标时,我喜欢删除所选项目。

我认为如果你看到我的代码会有点效率。下面是我的代码。它只是在开发者页面中描述

albumListView.setOnItemClickListener(this);
    albumListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    albumListView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub

            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            // TODO Auto-generated method stub

        }

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.album_context_menu, menu);
            return true;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public void onItemCheckedStateChanged(ActionMode mode, int position,
                long id, boolean checked) {
            // TODO Auto-generated method stub

        }
    });

如果你能提出一些建议,我会很高兴

1 个答案:

答案 0 :(得分:0)

  • MainActivity:

        package com.example.listviewexample;
    
        import java.util.ArrayList;
    
        import android.app.Activity;
        import android.graphics.Color;
        import android.os.Bundle;
        import android.util.Log;
        import android.view.ActionMode;
        import android.view.Menu;
        import android.view.MenuInflater;
        import android.view.MenuItem;
        import android.view.ViewGroup;
        import android.widget.AbsListView.MultiChoiceModeListener;
        import android.widget.ListView;
    
        public class MainActivity extends Activity {
    
            ListView listViewObj;
            MyAdapter adapter;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                ArrayList<String> listArgument = new ArrayList<String>();
                listArgument.add("Item 1");
                listArgument.add("Item 2");
                listArgument.add("Item 3");
                listArgument.add("Item 4");
                listArgument.add("Item 5");
                listArgument.add("Item 6");
                listArgument.add("Item 7");
                Log.d("listArgument", listArgument.toString());
                listViewObj = (ListView) findViewById(R.id.list);
                adapter = new MyAdapter(this, listArgument);
                listViewObj.setAdapter(adapter);
                listViewObj.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
                listViewObj.setSelected(true);
                listViewObj.setMultiChoiceModeListener(new MultiChoiceModeListener() {
                    int selectionCounter;
    
                    @Override
                    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                        // TODO Auto-generated method stub
                        return false;
                    }
    
                    @Override
                    public void onDestroyActionMode(ActionMode mode) {
                        // TODO Auto-generated method stub
    
                    }
    
                    @Override
                    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                        // TODO Auto-generated method stub
                        MenuInflater inflater = getMenuInflater();
                        inflater.inflate(R.menu.main, menu);
                        return true;
                    }
    
                    @Override
                    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                        // TODO Auto-generated method stub
                        switch (item.getItemId()) {
                        case R.id.action_delete:
                            selectionCounter = 0;
                            adapter.removeItem();
                            mode.finish();
                            return true;
                        default:
                            return false;
                        }
    
                    }
    
                    @Override
                    public void onItemCheckedStateChanged(ActionMode mode,
                            int position, long id, boolean checked) {
                        if (checked) {
                            selectionCounter++;
                            adapter.selectedItem(position, position);
    
                        } else {
                            selectionCounter--;
                            adapter.removeSelection(position);  
                        }
                        mode.setTitle("Selected :" + selectionCounter);
    
                    }
                });
            }
        }
    
  • 适配器类:

                package com.example.listviewexample;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Set;
    
    import android.content.Context;
    import android.graphics.Color;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    public class MyAdapter extends BaseAdapter{
        HashMap<Integer,Integer> selectionValueMap = new HashMap<Integer,Integer>();
        Context vContext;
        ArrayList<String> DataValueList = new ArrayList<String>();
        public MyAdapter(Context context,ArrayList<String> DataValueList)
        {
            this.vContext = context;
            this.DataValueList = DataValueList;
        }
    
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return DataValueList.size();
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return DataValueList.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
        public void selectedItem(int postion ,int flag)
        {
            selectionValueMap.put(postion, flag);
            notifyDataSetChanged();
        }
        public void removeSelection(int position)
        {
            selectionValueMap.remove(position);
            notifyDataSetChanged();
        }
        public void removeItem()
        {
            Set<Integer> mapKeySet = selectionValueMap.keySet();
            Iterator keyIterator = mapKeySet.iterator();
            while(keyIterator.hasNext())
            {
                int key = (Integer) keyIterator.next();
                Log.d("key", Integer.toString(key));
                DataValueList.remove(key);
                //DataValueList.remove(selectionValueMap.get(key));
            }
            notifyDataSetChanged();
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater mInflater = (LayoutInflater)     vContext.getSystemService(vContext.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.list_item, null);
            TextView tx = (TextView)convertView.findViewById(R.id.textView1);
            tx.setText(DataValueList.get(position));
    
            if(selectionValueMap.get(position) != null)
            {
                tx.setBackgroundColor(Color.GREEN);//Choose Any Color
            }
            return convertView;
        }
    
    
    }