Я пытаюсь реализовать функцию мгновенного поиска с помощью edittext. Я только что привязал ответ массива json к списку и добавил текст редактирования в верхней части списка и пытаюсь отфильтровать или найти данные в списке, когда пользователь начинает вводить текст редактирования ниже, используется код. Пожалуйста, Помоги мне. Приветствуются любые предложения, рекомендации и помощь.
MainActivity.cs
SetContentView(Resource.Layout.HomeScreen);
tableItems = new List<TableItem>();
var client = new RestClient("http://azurewebsites.net/");
var request = new RestRequest("Service/regionSearch", Method.POST);
request.RequestFormat = DataFormat.Json;
tableItems = client.Execute<List<TableItem>>(request).Data;
listView.Adapter = new HomeScreenAdapter(this, tableItems);
region = FindViewById<TextView> (Resource.Id.viewtext);
area= FindViewById<TextView> (Resource.Id.viewtext2);
_filterText = FindViewById<EditText>(Resource.Id.search);
listView = FindViewById<ListView>(Resource.Id.listView);
_filterText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => {
// filter on text changed
var searchTerm = _filterText.Text;
};
listView.ItemClick += OnListItemClick;
}
protected void OnListItemClick(object sender, Android.Widget.AdapterView.ItemClickEventArgs e)
{
var listView = sender as ListView;
var t = tableItems[e.Position];
// var clickedTableItem = listView.Adapter[e.Position];
Android.Widget.Toast.MakeText(this, clickedTableItem.DDLValue, Android.Widget.ToastLength.Short).Show();
}
HomeScreenAdapter.cs
public class HomeScreenAdapter : BaseAdapter<TableItem> {
List<TableItem> items;
Activity context;
public HomeScreenAdapter(Activity context, List<TableItem> items)
: base()
{
this.context = context;
this.items = items;
}
public override long GetItemId(int position)
{
return position;
}
public override TableItem this[int position]
{
get { return items[position]; }
}
public override int Count
{
get { return items.Count; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = items[position];
// TableItem item = items[position];
View view = convertView;
if (view == null) // no view to re-use, create new
view = context.LayoutInflater.Inflate(Resource.Layout.CustomView, null);
view.FindViewById<TextView>(Resource.Id.Text1).Text = item.DDLValue;
view.FindViewById<TextView>(Resource.Id.Text2).Text = item.areaMsg;
return view;
}
}
DDLValue
илиMsg
searchTerm
в качестве подстроки. 28.03.2016var clickedTableItem = listView.Adapter[e.Postion];
Я предполагаю, что это в вашем методеOnListItemClick
, гдеe
— этоItemClickEventArgs
. Если вам нужна более подробная информация, вероятно, лучше задать другой конкретный вопрос. С Уважением. 29.03.2016var selectedTableItem = e.Parent.GetItemAtPosition(e.Position);
, чтобы получить правильный элемент. Вы специально НЕ МОЖЕТЕ пытаться использоватьe.Position
как индекс вtableItems
, потому что этот индекс не исходит изtableItems
- он из подмножестваtableItems
. 29.03.2016selectedTableItem
будет очень общим типом (например,object
), а неTableItem
. Вы должны иметь возможность использовать его так:var selectedTableItem = (TableItem) e.Parent.GetItemAtPosition(e.Position);
и тогда у вас будут все свойства. 02.04.2016var selectedTableItem = ((HomeScreenAdapter)listView.Adapter) [e.Position];
проблема в том, что собственные методы Java в адаптере возвращают объект Java Lang, и вам придется преобразовать его обратно вTableItem
. Приведенный выше подход должен предотвратить эту проблему, обратившись к реальному адаптеру и используя оператор C# для получения элемента. 06.04.2016