我正在开发一个应用程序,其中消息列表(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的范围内)。 最重要的是,我无法删除它们,因为如果它们在定义的范围内,人们将无法看到它们。
是否有一种隐藏项目而不删除它们的方法?我虽然复制了邮件列表,但不知道这样是否可行。
预先感谢大家!
答案 0 :(得分:0)
好吧,我终于找到了使它起作用的东西。我创建了另一个ArrayList并将其放置在静态类中(以便我可以从应用程序中的多个位置更新显示)
这是我创建的方法
公共静态无效值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
就是这样!可能不是实现它的最有效方法,但它可行