Скрыть вид из окна Recycler - PullRequest
1 голос
/ 17 апреля 2020

Мне нужно предложение, я новичок в android, я пытаюсь реализовать смайлики, такие как Facebook, в своем фиде, используя эту ссылку FBReaction Я могу показывать смайлики по нажатию моей кнопки «Нравится», но Я не могу удалить его из поля зрения после выбора смайликов.

Вот мой код в файле адаптера для отображения смайликов

@Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row_social, parent, false);
        RelativeLayout rl = (RelativeLayout)view.findViewById(R.id.btReaction);
        final CardView root = (CardView)view.findViewById(R.id.card_view);
        rl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ReactionView rvl = new ReactionView(mContext);
                root.addView(rvl);
            }
        });
        return new ViewHolder(view);
    }

ReactionView rvl = new ReactionView(mContext); root.addView(rvl);

Над строкой используется для отображения вида смайликов.

RelativeLayout rl - это моя раскладка при нажатии на эту раскладку. Я показываю свой список смайликов. как показано ниже

enter image description here

так же, как и выше, у меня есть несколько каналов, где у меня есть кнопка «Мне нравится», при нажатии на эту кнопку я могу показать вид смайликов, но не могу Не удаляйте его, когда он выбран.

У меня есть другой класс (ReactionView) для отображения списка смайликов, который доступен в Git Репо

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

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вам нужно немного изменить пользовательский класс ReactionView, если вы заметите onTouchEvent() этого класса, он регистрирует разные MotionEvent и особенности, когда запускается событие MotionEvent.ACTION_UP, это означает, что пользователь оставил палец ReactionView смайликов, в это время вам нужно удалить ReactionView из вашего макета.

Таким образом, вы можете удалить свое представление, когда onDeselect() закончится, поэтому есть несколько методов:

Метод 1:

Снимите фокус с ReactionView и примените OnFocusChangeListener на ReactionView

public class ReactionView extends View {

    ... 

    private void onDeselect() {
        deselectAnimation.prepare();
        startAnimation(deselectAnimation);

        // Hide the view and remove the focus from it.
        setVisibility(GONE);
        setFocusableInTouchMode(false);
        setFocusable(false);
        setFocusableInTouchMode(true);

    }

В действии

rvl.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus)
            root.removeView(rvl);
    }
});

Метод 2:

Создайте прослушиватель ReactionView, запустите его обратный вызов в onDeselect() и внедрите его в свою деятельность

public class ReactionView extends View {

    ... 

    public interface DismissListener {
        void onDismiss();
    }

    public void setOnDismissListener(DismissListener onDismissListener) {
        mOnDismissListener = onDismissListener;
    }

    DismissListener mOnDismissListener;

    private void onDeselect() {
        deselectAnimation.prepare();
        startAnimation(deselectAnimation);

        if (mOnDismissListener != null)
            mOnDismissListener.onDismiss();

    }

В активности

rvl.setOnDismissListener(new ReactionView.DismissListener() {
    @Override
    public void onDismiss(int selectedIndex) {
        root.removeView(rvl);
    }
});
0 голосов
/ 17 апреля 2020

Вы можете сделать это с помощью слушателя.

В вашем классе ReactionView добавьте:

interface ReactionListener{

    public void onReactionClicked();
}

Затем добавьте в конструктор ReactionView (Context context, ReactionListener: listener). Я предполагаю, что вы хотите скрыть это представление, когда пользователь нажимает на эмодзи, поэтому, где вы устанавливаете прослушиватель щелчков для этого, также вызовите listener.onReactionClicked()

Затем в вашем адаптере создайте объект слушателя и удалите представление:

private ReactionListener reactionListener = new ReactionView.ReactionListener(){
    @override 
    public void onReactionClicked(){
       root.removeView(rvl);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...