[英]Android Xamarin Button inside a ListView
我想在我的一項活動中創建對象的ListView
,每一行都應該有TextView
和 3 個按鈕。 當我單擊不想在ListView
'適配器上處理它們的按鈕時,我想在我的 Activity 中使用它們。
有沒有辦法在我的活動中聲明按鈕並為它們設置OnClickListener()
? 此外,我需要在ListView
中獲取按鈕 position 。 換句話說,我想在我的活動中做類似的事情:
button = listView.FindViewById<Button>(Resource.Id.button);
button.SetOnClickListener(this);
並在public void OnClick(View v)
中執行以下操作:
if (v == button)
{
int positionInList = /* something */;
//...
}
最簡單的方法是在 GetView 方法中添加點擊事件:
public View GetView( int position, View convertView, ViewGroup parent)
{
.
.
.
.
yourButton.Click+= (sender,eventArgs) =>
{
// Your event
}
});
祝你好運
如果您有任何疑問,請隨時回復。
您也可以使用委托。 以下是代碼示例
Activity 將有 listview 或 recyclerview。 需要在活動中處理的方法將作為操作傳遞給適配器。
public void CreateListView()
{
testAdapter = new TestAdapter(vm.ForageSamples.ToList(), OnClick);
recyclerView.SetAdapter(testAdapter);
}
private void OnClick(EventArgs e)
{
//your logic
}
動作(委托)將被傳遞給適配器。 該操作將傳遞給 ViewHolder。
public class TestAdapter : RecyclerView.Adapter
{
List<Sample> forageTests;
private readonly Action<EventArgs> activityClick;
public TestAdapter(List<Sample> tests, Action<EventArgs> activityClick)
{
this.forageTests = tests;
this.activityClick = activityClick;
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
var layout = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.template_foragetests, parent, false);
return new TestViewHolder(layout, activityClick);
}
}
並且查看器將具有按鈕單擊事件。 從適配器傳遞的動作將在點擊事件中被調用。 因此,按鈕單擊事件將傳播到活動。
public class TestViewHolder : RecyclerView.ViewHolder
{
private Action<EventArgs> activityClick;
private Button addButton;
public TestViewHolder (View itemView, Action<EventArgs> activityClick) : base(itemView)
{
this.activityClick = activityClick;
addButton = itemView.FindViewById<Button>(Resource.Id.addbutton);
addButton.Click += OnClick;
}
void OnClick(object sender, EventArgs e)
{
activityClick(e);
}
}
如果您沒有使用 viewholder,則此代碼將添加到適配器本身中。
我最終做了類似於 FreakyAli 的回答的事情,但是改變了它,所以我可以在我的活動中而不是在適配器中實現我的點擊事件:
if (!button.HasOnClickListeners)
{
button.Click += delegate {
((MyActivity)context).MyButtonClickFunction(position);
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.