C#列表问题(Android/Monodroid ListView搜索)
我在C#中使用Monodroid进行Android开发 我正在尝试创建一个搜索功能。如果用户键入一个搜索词,它会工作,但是当按下退格键并且文本框中没有任何内容时(strTheFilter==“”),我的listview不会被更新 从调试中我可以看到,当用户删除搜索项时,m_lCallSigns计数为零,因此它没有添加任何内容。bNeedToFilter已在搜索无效时使用。为什么要这样做?它在该类的构造函数中初始化,初始化后调用该函数C#列表问题(Android/Monodroid ListView搜索),c#,android,list,android-listview,xamarin,C#,Android,List,Android Listview,Xamarin,我在C#中使用Monodroid进行Android开发 我正在尝试创建一个搜索功能。如果用户键入一个搜索词,它会工作,但是当按下退格键并且文本框中没有任何内容时(strTheFilter==“”),我的listview不会被更新 从调试中我可以看到,当用户删除搜索项时,m_lCallSigns计数为零,因此它没有添加任何内容。bNeedToFilter已在搜索无效时使用。为什么要这样做?它在该类的构造函数中初始化,初始化后调用该函数 ListAdapter.cs public vo
ListAdapter.cs
public void DisplayNewData(List<CallSignItem> new_items)
{
m_lCallSigns=new_items;
NotifyDataSetChanged();
}
public void GetCallSignsFiltered(String strTheFilter, bool bNeedToFilter)
{
strTheFilter = strTheFilter.ToLower();
List<CallSignItem> lFiltered = new List<CallSignItem>();
foreach (CallSignItem item in m_lCallSigns)
{
if (item.strCallSign.ToLower().Contains(strTheFilter)
|| !bNeedToFilter)
{
lFiltered.Add(item);
}
}
DisplayNewData(lFiltered);
}
ListAdapter.cs
public void DisplayNewData(列出新项目)
{
m_lCallSigns=新的_项目;
NotifyDataSetChanged();
}
public void getcallsignsfilter(字符串strTheFilter、bool bNeedToFilter)
{
strTheFilter=strTheFilter.ToLower();
List lFiltered=新列表();
foreach(m_lCallSigns中的CallSignItem项)
{
if(item.strCallSign.ToLower().包含(strTheFilter)
||!bNeedToFilter)
{
l过滤。添加(项目);
}
}
显示新数据(过滤);
}
该函数是从我的活动类调用的
Activity.cs
/// <summary>
/// Updates the listview with search criteria (Action Listener).
/// </summary>
/// <param name="sender">Sender.</param>
/// <param name="args">Arguments.</param>
private void InputSearchOnTextChanged(object sender, System.EventArgs args)
{
String strSearch = m_etSearch.Text;
bool bNeedToFilter = true;
// If it's empty, we need the full list
if (strSearch.Count() == 0)
{
bNeedToFilter = false;
}
// The EditText has a limit of 7 chars defined
// in xml. Tell the user
if (strSearch.Count() >= 7)
{
Utils.DisplayDialogMessage ("Search",
"You cannot enter more than 7 characters.",
true,
"",
"Ok",
false,
this);
}
listAdapter.GetCallSignsFiltered(strSearch, bNeedToFilter);
}
Activity.cs
///
///使用搜索条件更新listview(操作侦听器)。
///
///发送者。
///争论。
私有void InputSearchContextChanged(对象发送方,System.EventArgs args args)
{
字符串strearch=m_etSearch.Text;
bool bNeedToFilter=true;
//如果是空的,我们需要完整的列表
if(strSearch.Count()==0)
{
bNeedToFilter=false;
}
//EditText定义了7个字符的限制
//告诉用户
如果(strSearch.Count()>=7)
{
Utils.DisplayDialogMessage(“搜索”,
“输入的字符不能超过7个。”,
是的,
"",
“好的”,
假,,
这),;
}
GetCallSignsFiltered(strSearch,bNeedToFilter);
}
每次筛选时,都会将筛选后的列表传递给DisplayNewData()
DisplayNewData(过滤);
public void DisplayNewData(列出新项目)
{
m_lCallSigns=新的_项目;
NotifyDataSetChanged();
}
然后将过滤后的列表分配给m_lCallSigns。m_lCallSigns也是筛选时使用的“主”列表。您需要保留两份副本,一份未过滤的母版副本和一份用于显示的过滤副本。谢谢Jason!问题解决了 我拿了一份名单
public List<CallSignItem> m_lCallSigns_copy;
m_lCallSigns_copy = new List<CallSignItem>(m_lCallSigns);
然后更新:
public void DisplayNewData(List<CallSignItem> new_items)
{
m_lCallSigns = new_items;
NotifyDataSetChanged();
}
public void DisplayNewData(列出新项目)
{
m_lCallSigns=新的_项目;
NotifyDataSetChanged();
}
我正在尝试创建搜索功能
-使用LINQ。C#不是java。当搜索框为空时,您是否使用调试器单步执行foreach循环?是的,如果我在搜索框中键入“E”,它将过滤所有内容。然后删除E只会留下过滤后的结果。不是原始列表。就好像m_lCallSigns正在以某种方式删除未过滤的内容。@JP29您能为我提供上述示例的完整源代码吗,因为我正试图在我的应用程序中实现这一点
foreach (CallSignItem item in m_lCallSigns_copy)
{
if (item.strCallSign.ToLower().Contains(strTheFilter))
{
lFiltered.Add(item);
}
}
public void DisplayNewData(List<CallSignItem> new_items)
{
m_lCallSigns = new_items;
NotifyDataSetChanged();
}