【问题标题】:adding multiple select and delete functions in android context menu在android上下文菜单中添加多个选择和删除功能
【发布时间】:2014-09-25 07:54:40
【问题描述】:

我对 android 很陌生,我正在尝试为我的 listView 添加 context menu。所以我按照 android 开发者页面中显示的指南进行操作,现在如果我从我的 listView 中长按一个项目我得到 context menu 出现在操作栏中。我要补充的是,当我选择超过 1 个项目时,我想在 context menu 中显示 count 。此外,当我点击 context menu 中的 bin 图标时,我喜欢 delete 选定的项目。

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

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

        }
    });

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

【问题讨论】:

    标签: android listview contextmenu multipleselection


    【解决方案1】:
    • 主活动:

          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;
          }
      
      
      }
      

    【讨论】:

    • 即使我选择了一个项目,它也没有突出显示
    • 长按项目,它将显示到您的列表视图的上下文操作栏
    • 我的意思是我长按了,我也根据我选择的项目更改了标题,但这个选定的项目根本没有突出显示
    • 当我从 listView 中删除项目时发生 IndexOutOfBound 异常
    • 更新了选择绿色高亮的代码。并为删除所选项目进行了更改。现在尝试。抱歉延迟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多