列表视图中只有一次点击

时间:2017-09-13 10:41:24

标签: listview xamarin.android

我正在开发xamarin.android中的一个Android应用程序,我实现了listview,它运行正常。但问题是我的自定义列表中有一个按钮,当我点击按钮时只执行按钮单击事件但是listitemclick事件没有执行只有按钮点击工作。但我想实现点击事件,这是我的代码

internal class MyCustomListAdapter : BaseAdapter
{
    private List<AlbumTable> albm;

    public MyCustomListAdapter(List<AlbumTable> albm)
    {
        this.albm = albm;
    }

    public override int Count
    {

        get
        {
            return albm.Count();
        }
    }

    public override Java.Lang.Object GetItem(int position)
    {
        return null;
    }

    public override long GetItemId(int position)
    {
        return long.Parse(albm[position].Id);
    }

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

        if (view == null)
        {
            view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.inflate_album, parent, false);

            var name = view.FindViewById<TextView>(Resource.Id.text1);

            view.Tag = new ViewHolder() { Name = name };
        }

        var holder = (ViewHolder)view.Tag;

        holder.Name.Text = albm[position].Id;

        holder.Name.Click += (e, a) =>
            {
                DatabaseHelper db = new DatabaseHelper();
                db.DeleteFromTable(albm[position]);
            };
        return view;
    }

}

我的listview项目点击看起来像这样

   myList.ItemClick += (object sender, AdapterView.ItemClickEventArgs e) =>
        {
            string selectedFromList = e.Position.ToString();
            var activity2 = new Intent(this.Activity, typeof(AlbumViewer));
            activity2.PutExtra("position", e.Position.ToString());

            StartActivity(activity2);
            System.Console.WriteLine(selectedFromList);
        };

当我只按下按钮点击工作时,如果我从设计中删除了一个按钮,那么listview项目点击不起作用,那么列表项目点击不起作用。

如何填充按钮和项目点击

1 个答案:

答案 0 :(得分:0)

我在ListView(TextView和ImageView)中的活动元素有一些问题,我解决了在LinearLayout中转换ListView ...作为解决方案不是非常正统但在我的情况下它也很好用,因为我的列表非常短。 修改非常简单,也许可以帮助您了解正在发生的事情。

这是布局中的“列表视图”:

<ScrollView
    android:id="@+id/container_items"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/list_items"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</ScrollView>

这是我“设置”列表的位置(在我的情况下是一个活动):

LinearLayout listItems = FindViewById<LinearLayout>(Resource.Id.list_items);

// ...

private void RefreshList()
{
    var adapter = new MyAdapter(this, Resource.Layout.item_layout, items);
    Action refreshList = () =>
    {
        listItems.RemoveAllViews();
        for (int i = 0; i < adapter.Count; i++)
        {
            listItems.AddView(adapter.GetView(i, null, listItems));
        }
    };
    adapter.RegisterDataSetObserver(new DataSetObserver(refreshList));
    adapter.NotifyDataSetChanged();
}

最后这是适配器的GetView:

public override View GetView(int position, View convertView, ViewGroup parent)
{
    View v = convertView;
    if (v == null)
    {
        LayoutInflater vi = LayoutInflater.From(Context);
        v = vi.Inflate(this.layoutId, parent, false);
    }
    MyItem myItem = GetItem(position);

    ImageView btnRemove = v.FindViewById<ImageView>(Resource.Id.btn_item_remove);

    // ...

    btnRemove.Click += (sender, e) =>
    {
        this.items.Remove(myItem);
        this.Remove(myItem);
        this.NotifyDataSetChanged();
    };

    return v;
}