Контекстная панель действий Android — получение позиции RecyclerView

Я следовал этому руководству (http://www.startingandroid.com/how-to-use-sqlite-database-in-android/), поскольку я относительно новичок в разработке для Android и хотел получить представление о том, как работает SQL. Поскольку я собираюсь использовать CardView и RecyclerView для приложения, которое я разрабатываю, это руководство очень помогло мне начать работу.

Однако я пошел дальше и реализовал «Контекстную панель действий», чтобы иметь возможность «Избранное» или «Удалить» выбранные элементы (мой код для этого можно увидеть ниже). Итак, мой вопрос: как я могу получить позицию выбранного элемента и извлечь из него идентификатор SQL, и как мне включить множественный выбор в CAB?

@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_row, parent, false);
UserViewHolder userViewHolder = new UserViewHolder(v);

v.setClickable(true);

v.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Snackbar.make(v, "CLICK", Snackbar.LENGTH_SHORT).show();
    }
});

v.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        Snackbar.make(v, "LONG CLICK", Snackbar.LENGTH_SHORT).show();
        if (mActionMode != null) {
            return false;
        }
        v.startActionMode(new ActionMode.Callback() {
            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.context, menu);
                return true;
            }

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

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                //get number of selected items

                switch (item.getItemId()) {
                    case R.id.context_favourite:
                        //SQL - Favourite Item
                        mode.finish();
                    case R.id.context_delete:
                        //SQL - Delete Item
                        mode.finish();
                }
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                mActionMode = null;
            }
        });
        return true;
    }
});
 return userViewHolder;
}

person Toby Clench    schedule 08.04.2016    source источник


Ответы (1)


У меня была такая же проблема, в итоге я сохранил идентификатор курсора в видоискателе. Сделайте это в своей функции createviewholder

person Jeff    schedule 27.06.2016