gpt4 book ai didi

android - 无法获取要在 MonoDroid 中调用的 listView.ItemClick

转载 作者:行者123 更新时间:2023-11-29 14:19:04 25 4
gpt4 key购买 nike

我有以下代码:

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 不会被调用?

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

更新:

这是我的两种布局:

法律和法规列表:

<?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:

<?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 代码:

公共(public)类 LawsAndRegsListAdapter : BaseAdapter{ Activity 背景;

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 代码来尝试让它工作。

最佳答案

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

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-called-not-sure-what-have-wrong#latest奶酪男爵。谢谢 Cheesebaron!!!

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

关于android - 无法获取要在 MonoDroid 中调用的 listView.ItemClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14443364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com