ActionMode не работает должным образом со списком, встроенным в ViewPager

Мой фрагмент содержит viewpager, который содержит listView

Эти строки listView отображают миниатюру слева и некоторый текст справа. Как и в приложении Gmail, когда я нажимаю на миниатюру, я хочу, чтобы оно переключилось в режим действия. При нажатии в другом месте открывается другое действие, связанное с конкретной нажатой строкой. Эта часть работает нормально.

В моем адаптере у меня есть следующий код

viewHolder.getImage().setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(final View v) {
                documentFragments.setActionMode(true);
            }
        });

то в моем фрагменте у меня есть следующий код

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void setActionMode(final boolean enabled) {
    if (enabled && this.actionModeEnabled) {
        return;
    }

    if (!enabled && !this.actionModeEnabled) {
        return;
    }

    this.currentAdapter.setActionModeEnabled(enabled);
    if (enabled) {
        this.listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
        this.listView.startActionMode(new ActionMode.Callback() {

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

                @Override
                public void onDestroyActionMode(ActionMode mode) {
SOME CODE

                }

                @Override
            public boolean onCreateActionMode(final ActionMode mode, final Menu menu) {
                mode.setTitle(getActivity().getString(R.string.selectDocuments));
                getActivity().getMenuInflater().inflate(R.menu.documents_action_menu, menu);

                // force the checkbox display
                DocumentsFragment.this.currentAdapter.notifyDataSetChanged();
                return true;
            }

                @Override
                public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) {
 SOME CODE
                }
            });
    } else {
        this.listView.setChoiceMode(AbsListView.CHOICE_MODE_NONE);
    }
    this.actionModeEnabled = enabled;
}

Поэтому, когда я нажимаю на миниатюру, все работает нормально, я показываю флажок в строке, а меню параметров actionMode отображается в используемом мной appcompat. Теперь я хочу нажать в любом месте строки списка, чтобы выбрать/отменить выбор строк. Вот где это не работает.

Вот мой код:

private void initControls() {
    this.listView = (ListView) this.view.findViewById(android.R.id.list);

    registerForContextMenu(this.listView);
    this.listView.setOnItemClickListener(this);
}

    @Override
    public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
        if (this.actionModeEnabled) {
            final boolean isChecked = this.listView.isItemChecked(position);
 DO SOMETHING
        } else {
 DO SOMETHING
        }
    }

Когда не в actionMode вызывается onItemClick, но когда он находится в actionMode, он больше не вызывается...

Как я могу получить информацию о том, что строка была нажата в режиме действия?


person user1026605    schedule 12.03.2014    source источник


Ответы (1)


Я заменил CheckBox в макете строки на CheckedTextView, и теперь все работает нормально.

person user1026605    schedule 12.03.2014