setBackgroundResource в onItemCheckStateChanged не работает для первого выбора - PullRequest
0 голосов
/ 14 декабря 2018

Я работаю над проектом Android, где у меня есть вид сетки, и я настраиваю его с помощью MultiChoiceModeListener.

Когда я долго щелкаю, он успешно создает контекстную панель действий, но установка setBackgroundResource на исходный элемент, который создает CAB, не оказывает никакого влияния, однако все последующие элементы, выбранные, фоновый ресурсуспешно применяется.Ниже приведен код, который я использую:

gridView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
        gridView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener()
        {

            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked)
            {
                Log.d("DirectoryPicker-CAB", "CheckedStateChanged");
                //findViewById((int)gridView.getItemIdAtPosition(position)).setBackgroundColor(ContextCompat.getColor(DirectoryPicker.this, R.color.appPrimaryColour));
                //Toast.makeText(DirectoryPicker.this, "Item CAB Clicked: Checked: " + (checked ? "true" : "false"), Toast.LENGTH_LONG).show();
                Toast.makeText(DirectoryPicker.this, "Position: " + position, Toast.LENGTH_LONG).show();
                if (checked)
                {

                    //gridView.getChildAt(position).setBackgroundColor(ContextCompat.getColor(DirectoryPicker.this, R.color.appPrimaryColour));
                    Log.d("DirectoryPicker-View", gridView.getChildAt(position).toString());
                    gridView.getChildAt(position).setBackgroundResource(R.color.appPrimaryColour);
                    mode.invalidate();


                    directoryAdapter.getItem(position).setSelected(true);
                    selectedDirectories.add(directoryAdapter.getItem(position));

                }
                else
                {
                    directoryAdapter.getItem(position).setSelected(false);
                    FileManager.DirectoryOrFileInfo selectedDirectory = directoryAdapter.getItem(position);
                    for (int i = 0; i < selectedDirectories.size(); i++)
                    {
                        if (selectedDirectories.get(i) == selectedDirectory)
                        {
                            selectedDirectories.remove(i);
                            selectedDirectory.setSelected(false);
                        }
                    }
                    gridView.getChildAt(position).setBackgroundColor(ContextCompat.getColor(DirectoryPicker.this, android.R.color.transparent));
                }
                mode.setTitle(selectedDirectories.size() + " selected");
            }

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu)
            {
                MenuInflater inflater = getMenuInflater();
                inflater.inflate(R.menu.file_dir_cab_menu, menu);
                Log.d("DirectoryPicker-CAB", "OnActionModeCreate");
                return true;
            }

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

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

            @Override
            public void onDestroyActionMode(ActionMode mode)
            {
                selectedDirectories.clear();
            }
        });

Почему фоновый ресурс не был успешно применен к первому элементу, который долго щелкает, создает CAB, но он отлично работает для всех последующих выборов.

1 Ответ

0 голосов
/ 15 декабря 2018

Я понял, почему это не работает сейчас.Когда CAB создается, он запускает функцию getView для повторного вызова в моем адаптере, и в итоге он возвращается к исходному состоянию.

Поэтому я изменил свой адаптер вместо этого в методе getView, чтобы он проверял, помечен ли элемент как отмеченный и устанавливал фоновый ресурс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...