2016-06-06 94 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,它創建了上下文操作欄本身。