2016-06-06 92 views
0

我正在使用上下文操作栏的android应用程序,但onCreateActionMode没有被调用,也没有设置listview项目被选中,也没有itemcheckstatechanged侦听器工作。ActionMode OnCreateActionMode not called

下面是怎么了创建操作模式:

AdapterView.OnItemLongClickListener mOnItemLongClickListener = new AdapterView.OnItemLongClickListener() 
    { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) 
     { 

      if (mActionMode != null) 
      { 
       return false; 
      } 
      Toast.makeText(getActivity(), "Long Click", Toast.LENGTH_LONG).show(); 
      lstRooms.setOnItemClickListener(null); 
      mActionMode = getActivity().startActionMode(mActionModeCallback); 
      view.setSelected(true); 

      return true; 
     } 
    }; 

下面是我如何设置OnLongItemClickListener

lstRooms.setOnItemLongClickListener(mOnItemLongClickListener); 

下面是我ActionMode回调。

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() 
    { 
     @Override 
     public boolean onCreateActionMode(ActionMode mode, Menu menu) 
     { 
      lstRooms.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
      lstRooms.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() 
      { 
       @Override 
       public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) 
       { 
        Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_LONG).show(); 
       } 

       @Override 
       public boolean onCreateActionMode(ActionMode mode, Menu menu) 
       { 
        MenuInflater inflater = mode.getMenuInflater(); 
        inflater.inflate(R.menu.room_context_menu, menu); 
        mode.setTitle("HELLO WORLD"); 
        return true; 
       } 

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

       @Override 
       public boolean onActionItemClicked(ActionMode mode, MenuItem item) 
       { 
        return false; 
       } 

       @Override 
       public void onDestroyActionMode(ActionMode mode) 
       { 

       } 
      }); 
      return true; 
     } 

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

     @Override 
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) 
     { 
      return false; 
     } 

     @Override 
     public void onDestroyActionMode(ActionMode mode) 
     { 
      mActionModeCallback = null; 
     } 


    }; 

方法都不如onCreateActionMode被称为所以没有设置我的标题栏,虽然动作栏也变成黑色,出于某种原因,我所知道的文字应该是白色的,好像我做的actionMode.setTitle(“Hello”)在我创建它的工作对象后,它只是回调函数不起作用。

至于提到的另一个问题是,列表视图项并不表明其选择的,当我做view.setSelected(true)我也试过lstRoom.setItemChecked(position, true)

感谢您的帮助,您可以提供。

+0

你是在哪里设置了监听器的视图?我只看到它的声明... – Rucsi

+0

你也指的是什么监听器,我想我已经包含了所有的东西,从我可以告诉的指令中,我已经从列表视图中启动了动作模式,长按一下 – Boardy

+0

“adapterView .setOnItemLongClickListener(mOnItemLongClickListener)'。你的Toast'Long Click'出现了吗? – Rucsi

回答

0

我已经设法弄清楚问题所在。

我误解了多选模式侦听器的工作方式。我正在做的是在监听器中注册OnItemLongClickListener,将其设置为多选,然后在那里创建ActionMode.Callback,然后创建MultiChoice侦听器。我没有意识到MulitiChoiceListener本身可以创建ActionMode.Callback,所以它们彼此冲突。

相反,我摆脱了所有这些,并创建了一个MultiChoiceModeListener,它创建了上下文操作栏本身。