我正在开发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项目点击不起作用,那么列表项目点击不起作用。
如何填充按钮和项目点击
答案 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;
}