Listview Itemclick事件未触发android xamarin

Posted

技术标签:

【中文标题】Listview Itemclick事件未触发android xamarin【英文标题】:Listview Itemclick event not firing android xamarin 【发布时间】:2016-07-30 13:56:26 【问题描述】:
public override Java.Lang.Object InstantiateItem (ViewGroup container, int position)

    View view = LayoutInflater.From (container.Context).Inflate (Resource.Layout.pager_item, container, false);
    container.AddView (view);
     navlistArray = new List<jtaskItem>();
    string apiUrl = MainActivity.GetData("http://"+MainActivity.IPAddress+"/api/jtasks/GetItemList?uName=admin&tgId=1");
    JSONArray obj = new JSONArray(apiUrl);
    //JSONObject obj = new JSONObject(apiUrl);
    for (int i = 0; i < obj.Length(); i++)
    
        JSONObject e = obj.GetJSONObject(i);
        navlistArray.Add(new jtaskItem()  ID = e.GetString("ID"), Title = e.GetString("Title"), DueDate = e.GetString("DueDate"));
        //navlistArray.Add(e.GetString("Title"));

    

    //loading listview
    //TextView txtTitle = view.FindViewById<TextView> (Resource.Id.item_title);
    listView = view.FindViewById <ListView> (Resource.Id.list);
    MyListAdapter adapter = new MyListAdapter(container.Context, navlistArray);
    //ArrayAdapter adapter = new ArrayAdapter<string>(container.Context, Resource.Layout.pager_item, Resource.Id.item_title, navlistArray);
    listView.Adapter = adapter;
    listView.ItemClick += listView_ItemClick;


    return view;


void listView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)


    Console.Write(navlistArray[e.Position].ID);

这是我的代码,请帮忙,当我点击 lisview Itemclick 函数时没有调用请告诉我我在哪里做错了。

public class MyListAdapter:BaseAdapter<jtaskItem>

    public List<jtaskItem> mItems;
    public Context mContext;     

    public MyListAdapter(Context context, List<jtaskItem> items)
    
        mItems = items;
        mContext = context;            
    

    public override int Count
    
        get  return mItems.Count; 
    

    public override long GetItemId(int position)
    
        return position;
    

    public override jtaskItem this[int position]        

        get  return mItems[position]; 
    

    public override View GetView(int position, View convertView, ViewGroup parent)  
    
        View row=convertView;
        if (row == null)
        
             row=LayoutInflater.From(mContext).Inflate(Resource.Layout.List_Item, null,false);                  
        

        TextView taskTitle=row.FindViewById<TextView>Resource.Id.TaskTitle);
        taskTitle.Text = mItems[position].Title;
        TextView dueOn = row.FindViewById<TextView>(Resource.Id.DueOn);
        dueOn.Text = mItems[position].DueDate;
        TextView id = row.FindViewById<TextView>(Resource.Id.ID);
        id.Text = mItems[position].ID;
        CheckBox mycheckBox=row.FindViewById<CheckBox>Resource.Id.checkBox);
        mycheckBox.Checked = true;

        return row;
    

【问题讨论】:

可能是您的布局文件中的某些内容从您的列表视图中“窃取”了焦点... 当我使用 arrayAdapter 但 MylistAdapter 不工作时触发 【参考方案1】:

问题在于 android 不允许您选择具有可聚焦元素的列表项。

修改列表项上的复选框,使其具有如下属性:

android:focusable="false"

【讨论】:

【参考方案2】:

您的适配器必须继承自 BaseAdapter&lt;T&gt;ArrayAdapter&lt;T&gt;

public class MyListAdapter : BaseAdapter<jtaskItem>  /* ... */ 

见:https://developer.xamarin.com/guides/android/user_interface/working_with_listviews_and_adapters/part_2_-_populating_a_listview_with_data/#Implementing_a_ListAdapter

【讨论】:

是的,我像这个公共类 MyListAdapter 一样使用过:仅限 BaseAdapter 这应该可以。您能否展示您的 MyListAdapter 实现(将此添加到您的问题中)。 nope :) 它是 ***,如果其他人有同样的问题,他们想从你的错误中学习。如果它包含非公开的内容,请用最小的实现替换它。因此,只需编辑您的问题。也许我没有答案。因此,如果您将其发送给我,其他人都无法回答。 它是否包含一些奇怪的字符? 我添加了 MyListAdapter 类请告诉我我在哪里做错了。【参考方案3】:

在前面的评论中,添加图片寻求帮助。

android:focusable="false"

【讨论】:

以上是关于Listview Itemclick事件未触发android xamarin的主要内容,如果未能解决你的问题,请参考以下文章

在 ItemClick() 事件上获取 ListView 项目的详细信息

Android: ListView与Button的共存问题解决

Listview itemclick 不起作用

如何将单独的参数传递给 Xamarin Android C# 中的 ListView.ItemClick 调用

UWP:ListView ItemClick 不起作用

VB 如何让ListView选中的内容显示在Textbox中