Настраиваемое окно оповещения ListView не закрывается - PullRequest
0 голосов
/ 22 января 2020

Я создал собственный список в C#, он работает нормально. Проблема, с которой я сталкиваюсь, состоит в том, что список содержит более 50 записей. Для удаления записи я использую кнопку удаления. Когда я нажимаю кнопку «Удалить», открывается окно с запросом подтверждения. Все эти вещи работают нормально до первых 10 записей в списке, когда я прокручиваю список до конца и нажимаю кнопку удаления, там только проблема начинается, в окне предупреждения, когда я нажимаю кнопку ОК, она не закрывается, вместо этого он продолжает перемещаться к другим элементам списка. После 2 или 3 щелчков мышью закрывается только окно предупреждения, есть ли способ решить эту проблему

using System.Collections.Generic;
using Android.App;
using Android.Views;
using Android.Widget;
using MyAndroid.Models;

namespace MyAndroid.Adapter
{
 class UserListAdapter : BaseAdapter<User>
  {
    private Activity context;
    private List<User> users;
    public override int Count
    {
        get
        {
            return users.Count;
        }
    }

    public override User this[int position]
    {
        get
        {
            return users[position];
        }
    }

    public UserListAdapter(Activity context, List<User> users)
    {
        this.context = context;
        this.users = users;
    }

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


    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var view = convertView;
        if (view == null) {
            view = context.LayoutInflater.Inflate(Resource.Layout.userlayout, parent, false);
            var name = view.FindViewById<TextView>(Resource.Id.nameTextView);
            var deleteUser = view.FindViewById<ImageView>(Resource.Id.userDelete);
            var addUser = view.FindViewById<ImageView>(Resource.Id.userAdd);
            view.Tag = new ViewHolder() { Name = name, btnDelete = deleteUser, btnAdd = addUser };
        }
        var holder = (ViewHolder)view.Tag;
        holder.id = users[position].Id;
        holder.Name.Text = users[position].LastName;
        holder.btnDelete.Click += (sender, args) =>
        {
            AlertDialog.Builder dialog = new AlertDialog.Builder(context);
            AlertDialog alert = dialog.Create();
            alert.SetTitle("Delete");
            alert.SetMessage("Are you sure you want to delete this user");



            alert.SetButton("OK", (c, ev) =>
            {
                Toast.MakeText(context, "You going to delete " + holder.id + " " + users[position].FirstName + " " + users[position].LastName, ToastLength.Long).Show();
                alert.Dismiss();
                alert.Hide();
            });
            alert.SetCancelable(true);
            alert.Show();

        };
        return view;
    }
}

public class ViewHolder : Java.Lang.Object
{
    public int id { get; set; }
    public TextView Name { get; set; }

    public ImageView btnDelete { get; set; }

    public ImageView btnAdd { get; set; }
}

}

Это журнал отладки, который я получаю

I/chatty  (31411): uid=10087(com.companyname.myandroid) RenderThread identical 
7 lines
01-22 10:16:30.056 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:31.431 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:31.688 I/chatty  (31411): uid=10087(com.companyname.myandroid) 
RenderThread identical 34 lines
01-22 10:16:31.690 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:31.730 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:31.784 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:31.787 D/OpenGLRenderer(31411): endAllActiveAnimators on 
0xc0ea1000 (RippleDrawable) with handle 0xc48bc0d0
01-22 10:16:31.857 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:32.678 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:32.733 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:32.738 D/OpenGLRenderer(31411): endAllActiveAnimators on 
0xc12bd900 (RippleDrawable) with handle 0xc48bc0c0
01-22 10:16:32.819 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:33.802 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:33.825 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:33.828 D/OpenGLRenderer(31411): endAllActiveAnimators on 
0xc12bd200 (RippleDrawable) with handle 0xc232df60
01-22 10:16:33.908 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)
01-22 10:16:33.916 D/EGL_emulation(31411): eglMakeCurrent: 0xe03055a0: ver 3 0 
(tinfo 0xc59d65e0)

1 Ответ

1 голос
/ 22 января 2020

вы можете изменить GetView() так:

public override View GetView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder = null;
    var view = convertView;
    if (view == null) {
        view = context.LayoutInflater.Inflate(Resource.Layout.userlayout, parent, false);
        var name = view.FindViewById<TextView>(Resource.Id.nameTextView);
        var deleteUser = view.FindViewById<ImageView>(Resource.Id.userDelete);
        var addUser = view.FindViewById<ImageView>(Resource.Id.userAdd);
        holder = new ViewHolder() { Name = name, btnDelete = deleteUser, btnAdd = addUser };
        view.Tag = holder; 
        holder.btnDelete.Click += (sender, args) =>
        {
          int btnPosition = (int)((Button)sender).Tag;
          AlertDialog.Builder dialog = new AlertDialog.Builder(context);
          AlertDialog alert = dialog.Create();
          alert.SetTitle("Delete");
          alert.SetMessage("Are you sure you want to delete this user");
          alert.SetButton("OK", (c, ev) =>
          {
            Toast.MakeText(context, "You going to delete " + holder.id + " " + users[btnPosition].FirstName + " " + users[btnPosition].LastName, ToastLength.Long).Show();
            alert.Dismiss();
            alert.Hide();
          });
          alert.SetCancelable(true);
          alert.Show();

         };
     }
     holder = (ViewHolder)view.Tag;
     holder.btnDelete.Tag = position;
     holder.id = users[position].Id;
     holder.Name.Text = users[position].LastName;
     return view;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...