c# - 单击和longItemClick listview c#vs2017时Xamarin得到错误的项目
问题描述
过滤数据和 LongItemClick 时我得到错误的数据,当我单击 ItemClick 时也得到错误的数据。我们能帮帮我吗?
我需要改变什么才能正常工作?
我发送模型、活动和适配器。
有我的模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace NovaAndroid.Model
{
public class the_SetSubjModel
{
public string acSubject { get; set; }
public string acAddress { get; set; }
public string acName2 { get; set; }
public string acPost { get; set; }
public string acCountry { get; set; }
public string acCode { get; set; }
public string acPhone { get; set; }
public string acRegNo { get; set; }
public decimal anRebate { get; set; }
public string acBuyer { get; set; }
public static explicit operator the_SetSubjModel(Java.Lang.Object v)
{
throw new NotImplementedException();
}
}
}
有我的适配器:
using System;
using System.Collections.Generic;
using Android.App;
using Android.Content;
using Android.Views;
using Android.Widget;
using NovaAndroid.Model;
namespace NovaAndroid.Adapters
{
[Activity(Label = "ContactListBaseAdapter")]
public partial class ContactListBaseAdapter : BaseAdapter<the_SetSubjModel>
{
IList<the_SetSubjModel> contactListArrayList;
private LayoutInflater mInflater;
private Context activity;
public ContactListBaseAdapter(Context context, IList<the_SetSubjModel>
results)
{
this.activity = context;
contactListArrayList = results;
mInflater =
(LayoutInflater)activity.GetSystemService(Context.LayoutInflaterService);
}
public override int Count
{
get { return contactListArrayList.Count; }
}
public override long GetItemId(int position)
{
return position;
}
public override the_SetSubjModel this[int position]
{
get { return contactListArrayList[position]; }
}
public override Java.Lang.Object GetItem(int position)
{
return position;
}
我认为 GetView 方法有问题?public override View GetView(int position, View convertView, ViewGroup parent) {
ContactsViewHolder holder = null;
if (convertView == null)
{
convertView =
mInflater.Inflate(Resource.Layout.list_row_contact_list, null);
holder = new ContactsViewHolder();
// Show item in listView
holder.txtacSubject = convertView.FindViewById<TextView>
(Resource.Id.lr_fullName);
holder.txtacAddress = convertView.FindViewById<TextView>
(Resource.Id.lr_address);
holder.txtEmail = convertView.FindViewById<TextView>
(Resource.Id.lr_email);
holder.txtPib = convertView.FindViewById<TextView>
(Resource.Id.lr_pib);
convertView.Tag = holder;
}
else
{
holder = convertView.Tag as ContactsViewHolder;
}
holder.txtacSubject.Text =
contactListArrayList[position].acSubject.ToString();
holder.txtacAddress.Text = contactListArrayList[position].acAddress;
holder.txtEmail.Text = contactListArrayList[position].acPost;
holder.txtPib.Text = contactListArrayList[position].acCode;
if (position % 2 == 0)
{
convertView.SetBackgroundResource(Resource.Drawable.list_selector);
}
else
{
convertView.SetBackgroundResource(Resource.Drawable.list_selector_alternate);
}
return convertView;
}
public IList<the_SetSubjModel> GetAllData()
{
return contactListArrayList;
}
public class ContactsViewHolder : Java.Lang.Object
{
public TextView txtacSubject { get; set; }
public TextView txtacAddress { get; set; }
public TextView txtEmail { get; set; }
public TextView txtPib { get; set; }
public TextView txtacName2 { get; set; }
public TextView txtacPhone { get; set; }
public TextView txtacRegNo { get; set; }
public TextView txtanRebate { get; set; }
}
class ContactListBaseAdapterViewHolder : Java.Lang.Object
{
//Your adapter views to re-use
//public TextView Title { get; set; }
}
}
}
有我的活动:
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using NovaAndroid.Model;
using NovaAndroid.Adapters;
using Android.Views;
namespace NovaAndroid
{
[Activity(Label = "Svi kupci", MainLauncher = false)]
public class ToDoItemActivity : Activity
{
//Button btnAdd;
private SearchView sv;
private ListView lista;
private ArrayAdapter adapter;
IList<the_SetSubjModel> listaToDo = null;
List<the_SetSubjModel> readed = new List<the_SetSubjModel>();
the_SetSubjModel model = new the_SetSubjModel();
EditText contactList_txtSearch;
Button btnHomeScreen;
private const string URL =
"http://192.168.147.10:8888/Service.svc/GetAllSubjectWithoutBuyer";
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ToDoItemView);
btnHomeScreen = FindViewById<Button>(Resource.Id.buttonHome);
btnHomeScreen.Click += BtnHomeScreen_Click;
GetAllSubjectWithoutBuyer();
var str = readed.Select(x => x.acSubject).ToList();
var listView = FindViewById<ListView>(Resource.Id.listView);
contactList_txtSearch = FindViewById<EditText>
(Resource.Id.contactList_txtSearch);
lista = (ListView)FindViewById(Resource.Id.listView);
lista.Adapter = new ArrayAdapter<String>(this,
Android.Resource.Layout.SimpleListItem1, str);
lista = FindViewById<ListView>(Resource.Id.listView);
sv = FindViewById<SearchView>(Resource.Id.searchView);
adapter = new ArrayAdapter(this,
Android.Resource.Layout.SimpleListItem1, str);
lista.Adapter = adapter;
listaToDo = readed;
contactList_txtSearch.TextChanged +=
ContactList_txtSearch_TextChanged;
lista.ItemClick += Lista_ItemClick;
lista.ItemLongClick += Lista_ItemLongClick;
//
lista.Adapter = new ContactListBaseAdapter(this, listaToDo);
}
private void BtnHomeScreen_Click(object sender, EventArgs e)
{
var activityHome = new Intent(this, typeof(MainActivity));
StartActivity(activityHome);
}
private void GetAllSubjectWithoutBuyer()
{
WebRequest request = WebRequest.Create(URL);
request.Method = "GET";
request.ContentType = "application/json";
//request.ContentLength = DATA.Length;
try
{
using (var webClient = new System.Net.WebClient())
{
var json =
webClient.DownloadString("http://192.168.147.10:8888/
Service.svc/GetAllSubjectWithoutBuyer");
SResult web = JsonConvert.DeserializeObject<SResult>(json);
readed = web.GetAllSubjectWithoutBuyerResult;
}
}
catch (Exception ex)
{
}
}
private void ContactList_txtSearch_TextChanged(object sender,
Android.Text.TextChangedEventArgs e)
{
var searchText = contactList_txtSearch.Text;
//Compare the entered text with List
List<the_SetSubjModel> list = (from items in readed
where
items.acCode.Contains(contactList_txtSearch.Text)
select items).ToList<the_SetSubjModel>();
lista.Adapter = new ContactListBaseAdapter(this,list);
this.lista.DeferNotifyDataSetChanged();
}
private void Lista_ItemLongClick(object sender,
AdapterView.ItemLongClickEventArgs e)
{
the_SetSubjModel o = readed[e.Position];
var activityAddEdit = new Intent(this, typeof(AddEditActivity));
activityAddEdit.PutExtra("acSubject", o.acSubject.ToString());
activityAddEdit.PutExtra("acAddress", o.acAddress.ToString());
activityAddEdit.PutExtra("acPost", o.acPost.ToString());
activityAddEdit.PutExtra("acCode", o.acCode.ToString());
activityAddEdit.PutExtra("acCountry", o.acCountry.ToString());
activityAddEdit.PutExtra("acName2", o.acName2.ToString());
activityAddEdit.PutExtra("acPhone", o.acPhone.ToString());
activityAddEdit.PutExtra("acRegNo", o.acRegNo.ToString());
activityAddEdit.PutExtra("anRebate", o.anRebate.ToString());
StartActivity(activityAddEdit);
}
private void Lista_ItemClick(object sender,
AdapterView.ItemClickEventArgs e)
{
Toast.MakeText(this, adapter.GetItem(e.Position).ToString(),
ToastLength.Short).Show();
}
}
图片示例ItemClick错误:
解决方案
我想你已经回答了你自己的问题,好像你是从基本适配器继承的,如果你想创建一个布局充气器,你需要在你的适配器中实现 GetView() 方法。
推荐阅读
- reactjs - 如何使用 Jest end Enzyme 在 next.js 应用程序中编写单元测试 redux 连接组件
- javascript - 将 HTML 数据导出到 Excel
- django - 对我来说,Django polls 应用程序没有像教程中预期的那样工作
- postgresql - 如何从 Spring Boot 应用程序正确生成 Postgres 表?
- laravel - Laravel 重置密码链接中的域错误
- html - 如何使用不同的 dpr 调试 srcset?
- php - 如何修复 Laravel PHP 中的“Intervention \ Image \ Exception \ NotReadableException Image source not readable”错误
- c# - 我想通过 c#.net 以编程方式在 IIS 10 中添加一个站点
- oracle - Oracle 存储过程运行时 ORA-01007 变量不在选择列表中
- javascript - 嵌套 .then() 函数