我无法在我的Activity类的RowView
中迭代我夸大的自定义ListView
,并为充气的自定义RowView
上的控件分配正确的事件。
是的,我可以在适配器类GetView()
覆盖中向控件添加事件,但我认为存在一些问题。
StartActivity()
或this
class,所以Adapter似乎不是添加导航逻辑的地方,
例如我想要一行按钮打开“详细视图”,但如果我不能
无法调用StartActivity()
或传入适当的参数
Intent()
。所以,我想我只是将事件添加到Activity类的控件中。下一个问题,在活动类中,我无法弄清楚如何迭代ListView
项,例如没有ListView.Items
集合可以迭代并将事件处理程序添加到各种控件中。
我一直在其他地方走过几个Pluralsight课程和示例,通常那些在ListView_ItemClick
上只有事件处理程序,它们被添加到Activity类中。这很简单,我已经实现了并且正在工作,但我无法在膨胀的自定义RowView
有没有办法迭代RowViews
的夸大自定义ListView
?我错误地认为Activity vs Adapter中应该包含哪些代码?
我不认为代码示例是必要的,因为这个问题更具概念性,但如果您对我当前的实现感兴趣,这是我的项目:https://github.com/jmbarnes1987/Namely
答案 0 :(得分:1)
在适配器中实施View.IOnClickListener
接口
在适配器中添加
private InnerItemOnclickListener mListener;
public interface InnerItemOnclickListener
{
void itemClick(View v);
}
public void SetOnInnerItemOnClickListener(InnerItemOnclickListener listener)
{
this.mListener = listener;
}
public void OnClick(View v)
{
mListener.itemClick(v);
}
3.在你的adpater的BindData()方法中,添加:
deleteName.SetOnClickListener(this);
editName.SetOnClickListener(this);
4.在您的活动中,实施BabyNameListAdapter.InnerItemOnclickListener
和AdapterView.IOnItemClickListener
界面
5.在您的活动中添加此内容:
private BabyNameListAdapter Adapter;
public void itemClick(View v)
{
int position;
position = (int)v.Tag;
switch (v.Id)
{
case Resource.Id.editNameButton:
System.Diagnostics.Debug.Write("editNameButton click"+" position="+position);
break;
case Resource.Id.deleteNameButton:
System.Diagnostics.Debug.Write("deleteNameButton click" + " position=" + position);
break;
default:
break;
}
}
public void OnItemClick(AdapterView parent, View view, int position, long id)
{
System.Diagnostics.Debug.Write("RowView click");
}
6.用此替换你的BindData()
:
private void BindData()
{
Adapter = new BabyNameListAdapter(this, allBabyNames);
Adapter.SetOnInnerItemOnClickListener(this);
babyNameListView.Adapter=Adapter;
}
7.使用babyNameListView.ItemClick += BabyNameListView_ItemClick;
babyNameListView.OnItemClickListener = this;
8.运行你的项目。
startActivity()
,但它会很复杂,所以使用接口可以在活动中处理这个。我希望它会对你有所帮助。