我有一个带有自定义 ArrayAdapter 的列表视图。我创建了一个自定义的可破解线性布局,到目前为止,这段代码一切都很好:
public ArrayList<FBFriend> getSelectedFriends()
{
ArrayList<FBFriend> checkedFriends = new ArrayList<FBFriend>();
SparseBooleanArray checkedItems = m_FriendsListView.getCheckedItemPositions();
int size = checkedItems != null ? checkedItems.size() : 0;
for (int i = 0; i < size; i++)
{
if (checkedItems.valueAt(i) == true)
{
FBFriend selectedFriend = m_FriendsList.get(checkedItems.keyAt(i));
checkedFriends.add(selectedFriend);
Log.i(TAG, "Selected Friend:" + checkedItems.keyAt(i) + " - " + selectedFriend.toString());
}
}
return checkedFriends;
}
当我使用这个过滤我的朋友列表时:
public void onInputFriendSearchTextChanged(CharSequence cs, int arg1, int arg2, int arg3)
{
m_FBFriendsListAdapter.getFilter().filter(cs);
m_FBFriendsListAdapter.notifyDataSetChanged();
}
上面的方法 ( getSelectedFriends
) 返回错误的朋友,因为它考虑了选定的位置而不是选定的 ID。
我在我的适配器中定义了以下内容,希望它会导致该getCheckedItemPositions
方法使用 ID:
@Override
public long getItemId(int position)
{
FBFriend friend = getItem(position);
return Long.parseLong(friend.getID());
}
@Override
public boolean hasStableIds()
{
return true;
}
但它没有帮助......
过滤列表适配器时有什么方法可以获取正确的选定项目?