无法获取要在 MonoDroid 中调用的 listView.ItemClick [英] Unable to get listView.ItemClick to be called in MonoDroid

查看:35
本文介绍了无法获取要在 MonoDroid 中调用的 listView.ItemClick的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

protected override void OnCreate (Bundle bundle)
{
    progress = ProgressDialog.Show(this, "", "Loading...");
    progress.SetProgressStyle(ProgressDialogStyle.Spinner);

    base.OnCreate (bundle);

    //Set the Activity's view to our list layout        
    SetContentView(Resource.Layout.LawsAndRegsList);

    new Thread(new ThreadStart(() => {
        //Create our adapter
        listAdapter = new LawsAndRegsListAdapter(this);
        this.RunOnUiThread ( () => {
            //Find the listview reference
            listView = FindViewById<ListView>(Resource.Id.listView);

            //Hook up our adapter to our ListView
            listView.Adapter = listAdapter;

            //Wire up the click event
            //listView.ItemClick += new EventHandler<ListView.ItemClickEventArgs>(listView_ItemClick);
            listView.ItemClick += listView_ItemClick;

            listAdapter.NotifyDataSetChanged(); 

            progress.Dismiss();
        });
    })).Start();
}

void listView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
    //Get our item from the list adapter
    var item = this.listAdapter.GetItemAtPosition(e.Position);

    //Make a toast with the item name just to show it was clicked
    Toast.MakeText(this, item.Name + " Clicked!", ToastLength.Short).Show();
}

谁能告诉我为什么 ItemClick 不会被调用?

Can anyone tell me why the ItemClick would not get called?

它看起来像我读过的和我看到的例子,那么我做错了什么?感谢您的帮助.

It looks like what I have read and examples I have seen so what am I doing wrong? thanks for the help.

更新:

这是我的两种布局:

LawsAndRegs 列表:

LawsAndRegsList:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget28"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/topLevelMenuBackground"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btnAddExpense"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/ButtonHome"
            android:layout_centerVertical="true" />
        <TextView
            android:id="@+id/lblExpenseCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="15dp"
            android:text="@string/LawsAndRegs"
            android:textColor="#ffffffff"
            android:textSize="20sp"
            android:layout_centerVertical="true" />
    </RelativeLayout>
    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

LawsAndRegsListItem:

LawsAndRegsListItem:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget28"
    android:layout_width="fill_parent"
    android:background="@drawable/topLevelMenuCellBackground"
    android:layout_height="40px">
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <ImageView
            android:id="@+id/imageItem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_centerVertical="true"
            android:layout_gravity="center_vertical" />
        <TextView
            android:id="@+id/textTop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:textColor="#111479"
            android:text="hello"
            android:layout_toRightOf="@+id/imageItem"
            android:textStyle="bold"
            android:layout_marginLeft="10dp" />
        <ImageButton
            android:src="@drawable/OrangeAccessoryButton"
            android:layout_width="wrap_content"
            android:layout_height="25dp"
            android:layout_alignParentRight="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="15dp"
            android:layout_centerVertical="true"
            android:id="@+id/imageButton1"
            android:background="@android:color/transparent" />
    </RelativeLayout>
</LinearLayout>

更新 #2:

添加了我的 LIstAdapter 代码:

Added my LIstAdapter code:

公共类 LawsAndRegsListAdapter : BaseAdapter{活动上下文;

public class LawsAndRegsListAdapter : BaseAdapter { Activity context;

public List<LawsAndRegs> items;

public LawsAndRegsListAdapter (Activity context) //We need a context to inflate our row view from
{
    this.context = context;

    MY_SEB_SERVICE_ContentWS.ContentWS contentWS = new MY_WEB_SERVICE_ContentWS.ContentWS ();
    string sMenu = contentWS.GetMenuXML (146, 1, "", 0, 1033);

    XmlRootAttribute r = new XmlRootAttribute ("Item");
    var ser = new XmlSerializer (typeof(Item), r);
    StringReader stringReader;
    stringReader = new StringReader (sMenu);
    Item obj = (Item)ser.Deserialize (stringReader);
    ItemMenuItem[] m = obj.Menu.Item;
    ItemMenuItem larMenu = null;
    foreach (ItemMenuItem mnu in m)
    {
        if (mnu.ItemID == 155)
        {
            if (this.items == null)
                this.items = new List<LawsAndRegs> ();
            larMenu = mnu;
            break;
        }
    }

    if (larMenu != null)
    {
        foreach (ItemMenuItemMenuItem imimi in larMenu.Menu.Item)
        {
            LawsAndRegs lar = new LawsAndRegs();
            lar.Name = (string)imimi.Items[2];
            lar.Image = (string)imimi.Items[3];
            this.items.Add (lar);
        }
    }
}

public override int Count
{
    get { return items.Count; }
}

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

public override long GetItemId(int position)
{
    return position;
}

public LawsAndRegs GetItemAtPosition(int position)
{
    return items[position];
}

public override View GetView(int position, View convertView, ViewGroup parent)
{
    //Get our object for this position
    var item = items[position];         

    //Try to reuse convertView if it's not  null, otherwise inflate it from our item layout
    // This gives us some performance gains by not always inflating a new view
    // This will sound familiar to MonoTouch developers with UITableViewCell.DequeueReusableCell()
    var view = (convertView ?? context.LayoutInflater.Inflate(Resource.Layout.LawsAndRegsListItem, parent, false)) as LinearLayout;

    //Find references to each subview in the list item's view
    ImageView imgView = (ImageView)view.FindViewById(Resource.Id.imageItem);
    imgView.Clickable = true;
    TextView textTop = (TextView)view.FindViewById(Resource.Id.textTop);
    textTop.Clickable = true;

    var bm = BitmapFactory.DecodeStream(
        new Java.Net.URL("http://www.SOME_SITE.com/" + item.Image).OpenStream());
    imgView.SetImageBitmap(bm);

    //Assign this item's values to the various subviews
    textTop.SetText(item.Name, TextView.BufferType.Normal);

    view.Clickable = true;

    //Finally return the view
    return view;
}

}

我添加了 view.clickable 代码来尝试让它工作.

I added the view.clickable code in trying to get this to work.

推荐答案

终于!!我发现了我的问题......原来问题是我在 ListView 中的 ImageButton.它正在窃取焦点并消耗触摸事件.因此,在我的自定义适配器中,在 GetView 中我需要执行以下操作:

Finally!! I found out my issue... it turned out that the problem was my ImageButton in the ListView. It was stealing the focus and consuming the touch events. So in my custom Adapter, in the GetView I needed to do something like the following:

var imageButton = view.FindViewById<ImageButton>(Resource.Id.imageButton1);
imageButton.Focusable = false;
imageButton.FocusableInTouchMode = false;
imageButton.Clickable = true;

imageButton.Click += (sender, args) => Console.WriteLine("ImageButton {0} clicked", position);

这会从图像按钮中移除焦点.解决方案在这里给了我:http://forums.xamarin.com/discussion/871/how-do-i-get-itemclick-of-a-listview-to-get-由 Cheesebaron 称为 - 不确定 - 有 - 错误#latest.谢谢芝士男爵!!!

That removes the focus from the image button. The solution was given to me here: http://forums.xamarin.com/discussion/871/how-do-i-get-itemclick-of-a-listview-to-get-called-not-sure-what-have-wrong#latest by Cheesebaron. Thank you Cheesebaron!!!

我希望这可以帮助另一个有类似问题的新手!

I hope this may help another newbie with a similar issue!!

这篇关于无法获取要在 MonoDroid 中调用的 listView.ItemClick的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆