2016-06-06 2 views
0

Я работаю над андроидным приложением с контекстной панелью действий, но onCreateActionMode не вызывается, а также не выбран элемент listview, а также не работает прослушиватель itemcheckstatechanged.ActionMode OnCreateActionMode не называется

Ниже, как я создаю режима действия:

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 Callback.

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) '. Появляется ли ваш тост 'Long Click'? – Rucsi

ответ

0

Мне удалось выяснить, в чем проблема.

У меня возникло непонимание того, как работает прослушиватель режима множественного выбора. То, что я делал, это зарегистрировать OnItemLongClickListener, а затем в Listener, установить его для множественного выбора, а затем создать ActionMode.Callback, а затем создать прослушиватель MultiChoice. Я не понимал, что MulitiChoiceListener действительно может создать сам ActionMode.Callback, чтобы они противоречили друг другу.

Вместо этого я избавляюсь от всего этого и просто создаю MultiChoiceModeListener, который сам создает контекстную панель действий.

Смежные вопросы