C#에서 Android 개발 용 Monodroid를 사용하고 있습니다.C#의 목록 문제 (Android/Monodroid ListView 검색)
검색 기능을 만들려고합니다. 사용자가 검색어를 입력하면 백 스페이스를 누르고 텍스트 상자 (strTheFilter == "")에 아무 것도 없어도 내 목록보기가 업데이트되지 않습니다.
디버깅에서 나는 사용자가 검색어를 제거 할 때 m_lCallSigns Count가 0이라는 것을 알 수 있으므로 아무 것도 추가하지 않습니다. 검색이 아무것도없는 경우 bNeedToFilter가 사용되었습니다. 왜이 일을하는거야? 이 클래스의 생성자에서 초기화되고 함수는 초기화 후에 호출됩니다.
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);
}
이 함수는 내 액티비티 클래스에서 호출됩니다.
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);
}
'나는 노력하고 있어요 검색 기능 만들기 - LINQ를 사용하십시오. C#은 자바가 아닙니다. –
검색 상자가 비어있을 때 디버거를 사용하여 foreach 루프를 단계별로 실행 했습니까? – Jason
예 검색 창에 "E"를 입력하면 모든 항목이 필터링됩니다. 그런 다음 E를 제거하면 필터링 된 결과 만 남습니다. 원래 목록이 아닙니다. 마치 m_lCallSigns가 필터링되지 않은 것들이 어떻게 든 제거되는 것과 같습니다. – JP29