我正在开发一个应用程序,其中消息列表 (MESSAGE_RECIEVED) 应仅在特定距离(50、100、200、300 或 400 米)内可见
为此,我有一个消息 ArrayList (MESSAGE_RECIEVED)、一个带有自定义适配器的 RecyclerView 和一个包含 RecyclerView 的片段,并将其提供给我的 ArrayList。
我现在的方法如下:
删除条目(在我的适配器中):
public void removeAt(int pos) {
mMessagesList.remove(pos);
notifyItemRemoved(pos);
notifyItemRangeChanged(pos, mMessagesList.size());
}
添加条目(在我的适配器中):
public void addAt(int pos, Message m){
mMessagesList.add(pos, m);
notifyItemInserted(pos);
}
最后我的代码确定一个项目是否太远:
ArrayList<String[]> operation = new ArrayList<>();
for (int i = 0; i < MESSAGES_RECEIVED.size(); i++){
if(dist <= distMax){
if(!MESSAGES_RECEIVED.get(i).isDisplayed()){
operation.add(new String[]{"add", String.valueOf(i)});
MESSAGES_RECEIVED.get(i).setDisplayed(true);
}
} else {
operation.add(new String[]{"remove", String.valueOf(i)});
}
}
for (String[] values : operation){
Log.i(TAG, "recalculateDistance: " + values[0] + " " + values[1]);
if(values[0].equals("add")){
int pos = Integer.valueOf(values[1]);
mRecyclerViewAdapter.addAt(pos, MESSAGES_RECEIVED.get(pos));
} else if(values[0].equals("remove")){
int pos = Integer.valueOf(values[1]);
mRecyclerViewAdapter.removeAt(pos);
}
}
此代码不起作用,因为项目已从我的消息 ArrayList 中删除。我无法删除它们,因为它们在其他地方使用(并且我有 IndexOutOfBoundsException,因为该位置超出了 ArrayList 的范围)。最重要的是,我无法删除它们,因为如果它们在定义的范围内,人们将无法看到它们。
有没有办法隐藏项目而不删除它们?我虽然复制了我的消息列表,但不知道这是否可行。
繁花如伊
相关分类