我使用的是從JoeRock的Channel.The問題的例子存在,當我使用過濾列表視圖過濾後點擊列表視圖時,我得到錯誤的項目也
這裏後產品Click事件是我等級:
class Friend
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Age { get; set; }
public string Gender { get; set; }
}
這裏是我的好友適配器
class FriendsAdapter : BaseAdapter<Friend>
{
private Context mContext;
private int mRowLayout;
private List<Friend> mFriends;
public FriendsAdapter(Context context, int rowLayout, List<Friend> friends)
{
mContext = context;
mRowLayout = rowLayout;
mFriends = friends;
}
public override int Count
{
get { return mFriends.Count; }
}
public override Friend this[int position]
{
get { return mFriends[position]; }
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
row = LayoutInflater.From(mContext).Inflate(mRowLayout, parent, false);
}
TextView firstName = row.FindViewById<TextView>(Resource.Id.txtFirstName);
firstName.Text = mFriends[position].FirstName;
TextView lastName = row.FindViewById<TextView>(Resource.Id.txtLastName);
lastName.Text = mFriends[position].LastName;
TextView age = row.FindViewById<TextView>(Resource.Id.txtAge);
age.Text = mFriends[position].Age;
TextView gender = row.FindViewById<TextView>(Resource.Id.txtGender);
gender.Text = mFriends[position].Gender;
return row;
}
,這裏是我的活動
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
mListView = FindViewById<ListView>(Resource.Id.listView);
mSearch = FindViewById<EditText>(Resource.Id.etSearch);
mContainer = FindViewById<LinearLayout>(Resource.Id.llContainer);
mTxtHeaderFirstName = FindViewById<TextView>(Resource.Id.txtHeaderFirstName);
mTxtHeaderLastName = FindViewById<TextView>(Resource.Id.txtHeaderLastName);
mTxtHeaderAge = FindViewById<TextView>(Resource.Id.txtHeaderAge);
mTxtHeaderGender = FindViewById<TextView>(Resource.Id.txtHeaderGender);
mSearch.Alpha = 0;
mContainer.BringToFront();
mSearch.TextChanged += mSearch_TextChanged;
mFriends = new List<Friend>();
mFriends.Add(new Friend { FirstName = "Bob", LastName = "Smith", Age = "33", Gender = "Male" });
mFriends.Add(new Friend { FirstName = "Tom", LastName = "Smith", Age = "45", Gender = "Male" });
mFriends.Add(new Friend { FirstName = "Julie", LastName = "Smith", Age = "2020", Gender = "Unknown" });
mFriends.Add(new Friend { FirstName = "Molly", LastName = "Smith", Age = "21", Gender = "Female" });
mFriends.Add(new Friend { FirstName = "Joe", LastName = "Lopez", Age = "22", Gender = "Male" });
mFriends.Add(new Friend { FirstName = "Ruth", LastName = "White", Age = "81", Gender = "Female" });
mFriends.Add(new Friend { FirstName = "Sally", LastName = "Johnson", Age = "54", Gender = "Female" });
mAdapter = new FriendsAdapter(this, Resource.Layout.row_friend, mFriends);
mListView.Adapter = mAdapter;
mListView.ItemClick += Mlistview_ItemClick;//The Problem is Here:
}
private void Mlistview_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
string test = mFriends[e.Position].FirstName;
Toast.MakeText(this, test, ToastLength.Short).Show();
}
void mSearch_TextChanged(object sender, Android.Text.TextChangedEventArgs e)
{
List<Friend> searchedFriends = (from friend in mFriends
where friend.FirstName.Contains(mSearch.Text, StringComparison.OrdinalIgnoreCase) || friend.LastName.Contains(mSearch.Text, StringComparison.OrdinalIgnoreCase)
|| friend.Age.Contains(mSearch.Text, StringComparison.OrdinalIgnoreCase) || friend.Gender.Contains(mSearch.Text, StringComparison.OrdinalIgnoreCase)
select friend).ToList<Friend>();
//Refreshes the listview
mAdapter = new FriendsAdapter(this, Resource.Layout.row_friend, searchedFriends);
mListView.Adapter = mAdapter;
}
問題是,當我的列表視圖從searchBox過濾,我選擇了一個項目它沒有顯示我正確的名稱,但名稱存在於我的具體列表位置的mitems。
我不知道如何解決這個問題。即使對於java也接受任何答案。我只需要一個解決方案來解決這個問題。下面請看
我讀,我必須創建一個RecyclerView.Adapter.Is是正確的?怎麼做到這一點?
你正在引用mFriends這是你的全局變量......你將需要檢索你的列表視圖中的值 – Alander
幫助我如何解決這個問題? – Dimitris