2 votes

Cliquez sur un élément et passez à un autre site.

Si un objet est cliqué, la page suivante ne doit pas être appelée immédiatement. Mais le clic doit rester sur l'objet jusqu'à ce que vous fassiez défiler une lingette jusqu'à la page suivante.

Comment retenir la commande de clic sur un élément ?

Comment peut-on passer de l'élément cliqué à une autre page ?

Mise à jour

Cliquez sur un élément > OnHold> balayez l'élément retenu vers la gauche et la droite.

C'est le comportement réel :

    private int index = -1;

                break;
        }
        return true;
    }
}

0voto

Grace Feng Points 13752

Pour mettre en évidence l'élément lorsqu'il est cliqué, vous pouvez définir une couleur d'arrière-plan pour la vue de l'élément. Pour effectuer un geste de balayage pour chaque élément, je pense que vous devrez mettre en œuvre la méthode suivante IOnTouchListener pour chaque élément. Ici, j'ai créé un adaptateur pour mettre en œuvre cette fonctionnalité :

public class LVAdapter : BaseAdapter<ListItemModel>, View.IOnTouchListener
{
    private List<ListItemModel> items = new List<ListItemModel>();
    private Activity context;

    private int index = -1;

    public enum SwipeAction
    {
        LR, // Left to Right
        RL, // Right to Left
        TB, // Top to bottom
        BT, // Bottom to Top
        None // when no action was detected
    }

    private int MIN_DISTANCE = 100;
    private float downX, downY, upX, upY;
    private SwipeAction maction = SwipeAction.None;

    public LVAdapter(Activity context, List<ListItemModel> items) : base()
    {
        this.context = context;
        this.items = items;
    }

    public override ListItemModel this[int position]
    {
        get { return items[position]; }
    }

    public override int Count
    {
        get { return items.Count; }
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    private void SetSelectedItem(int position)
    {
        index = position;
        NotifyDataSetChanged();
    }

    private class MyViewHolder : Java.Lang.Object
    {
        public TextView Name { get; set; }
        public TextView Description { get; set; }
        public int index { get; set; }
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        MyViewHolder holder = null;
        var view = convertView;

        if (view != null)
            holder = view.Tag as MyViewHolder;

        if (holder == null)
        {
            holder = new MyViewHolder();
            view = context.LayoutInflater.Inflate(Resource.Layout.ItemCell, null);
            holder.Name = view.FindViewById<TextView>(Resource.Id.nametxt);
            holder.Description = view.FindViewById<TextView>(Resource.Id.detailtxt);
            holder.index = position;
            view.Tag = holder;
        }

        holder.Name.Text = items[position].Name;
        holder.Description.Text = items[position].Description;

        if (index != -1 && position == index)
        {
            holder.Name.SetBackgroundColor(Android.Graphics.Color.Red);
            holder.Description.SetBackgroundColor(Android.Graphics.Color.Pink);
        }
        else
        {
            holder.Name.SetBackgroundColor(Android.Graphics.Color.RoyalBlue);
            holder.Description.SetBackgroundColor(Android.Graphics.Color.SeaGreen);
        }

        view.SetOnTouchListener(this);

        return view;
    }

    public bool OnTouch(View v, MotionEvent e)
    {
        switch (e.Action)
        {
            case MotionEventActions.Down:
                downX = e.GetX();
                downY = e.GetY();
                maction = SwipeAction.None;
                break;

            case MotionEventActions.Move:
                upX = e.GetX();
                upY = e.GetY();
                var deltaX = downX - upX;
                var deltaY = downY - upY;

                if (Math.Abs(deltaX) > MIN_DISTANCE)
                {
                    if (deltaX < 0)
                    {
                        maction = SwipeAction.LR;
                    }
                    else if (deltaX > 0)
                    {
                        maction = SwipeAction.RL;
                    }
                    return true;
                }
                else if (Math.Abs(deltaY) > MIN_DISTANCE)
                {
                    if (deltaY < 0)
                    {
                        maction = SwipeAction.TB;
                    }
                    else if (deltaY > 0)
                    {
                        maction = SwipeAction.BT;
                    }
                    return false;
                }
                break;

            case MotionEventActions.Up:
                var holder = v.Tag as MyViewHolder;
                if (maction == SwipeAction.None)
                {
                    SetSelectedItem(holder.index);
                }
                else if (maction == SwipeAction.LR | maction == SwipeAction.RL)
                {
                    if (holder.index == index)
                        context.StartActivity(typeof(Activity1));
                }
                break;
        }
        return true;
    }
}

El ListItemModel est assez simple de mon côté :

public class ListItemModel
{
    public string Name { get; set; }
    public string Description { get; set; }
}

Vous pouvez essayer de modifier le modèle et le support selon vos besoins.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X