Necesito una sugerencia Soy nuevo en Android, estoy tratando de implementar emojis como Facebook en mi feed usando este enlace FBReaction Puedo mostrar los emojis al hacer clic en mi botón Me gusta, pero no puedo eliminarlo desde mi punto de vista una vez que los emojis fueron seleccionados.

Aquí está mi código en el archivo Adaptador para mostrar la vista de emojis

@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);

La línea anterior se usa para mostrar la vista de emojis.

RelativeLayout rl es mi diseño al hacer clic en este diseño. Estoy mostrando mi lista de emojis. como abajo

enter image description here

Igual que el anterior, tengo varias fuentes donde tengo el botón Me gusta, al hacer clic en ese botón, puedo mostrar la vista de emojis pero no puedo eliminarla una vez que está seleccionada.

Tengo una clase diferente (ReactionView) para mostrar la lista de emojis que está disponible en Git Repo

Ahora Mi problema es cómo elimino la vista una vez que se seleccionaron los emojis.

1
Rigsby 17 abr. 2020 a las 17:59

2 respuestas

La mejor respuesta

Debe modificar un poco la clase de vista personalizada ReactionView, si observa el onTouchEvent() de esa clase, registra diferentes MotionEvent y particularidad cuando MotionEvent.ACTION_UP se activa el evento, esto significa que el usuario ha dejado el dedo de los emojis ReactionView, en este momento debe eliminar el ReactionView de su diseño.

Entonces, como puede eliminar su vista cuando termina onDeselect(), para eso, hay un par de métodos:

Método 1:

Elimine el foco de ReactionView e implemente OnFocusChangeListener en 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);

    }

En actividad

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

Método 2:

Cree un oyente para ReactionView, active su devolución de llamada en onDeselect() e impleméntelo en su actividad

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();

    }

En actividad

rvl.setOnDismissListener(new ReactionView.DismissListener() {
    @Override
    public void onDismiss(int selectedIndex) {
        root.removeView(rvl);
    }
});
1
Zain 17 abr. 2020 a las 17:42

Puedes hacer esto con un oyente.

En su clase ReactionView agregue:

interface ReactionListener{

    public void onReactionClicked();
}

Luego agregue al constructor de ReactionView (Context context, ReactionListener: listener). Supongo que desea ocultar esta vista cuando el usuario hace clic en un emoji, por lo que cuando configura el escucha de clics para eso, también llame a listener.onReactionClicked()

Luego, en su adaptador, cree el objeto de escucha y elimine la vista:

private ReactionListener reactionListener = new ReactionView.ReactionListener(){
    @override 
    public void onReactionClicked(){
       root.removeView(rvl);
    }
0
Miruna Radu 17 abr. 2020 a las 15:11