根据距离添加和删除可回收视图中的项目



我正在开发一个应用程序,其中消息列表(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的范围(。最重要的是,我不能删除它们,因为如果它们在定义的范围内,人们将无法看到它们。

有没有一种方法可以隐藏项目而不删除它们?我想复制我的邮件列表,不知道这是否可行。

提前感谢各位!

好吧,我终于找到了让它工作的方法。我创建了另一个ArrayList,并将其放在一个静态类中(这样我就可以从应用程序中的多个位置更新显示(

这是我创建的方法

公共静态void updateDisplayedMessages(({MESSAGES_DISPLAYED.clear((;

getDistance(MESSAGES_RECEIVED);
for(Message m : MESSAGES_RECEIVED){
float dist = m.getDistance();
int distMax = Integer.valueOf(VALUE_PREF_RADIUS_GEO_FENCING);
if(dist < distMax){
MESSAGES_DISPLAYED.add(m);
}
}
}

一旦调用了这个,我就从我的片段中调用notifyDataSetChanged,就这样!可能不是实现它的最有效方法,但它可以

相关内容

最新更新