RecyclerView - 迭代乘我itens
我试图使用foreach
列出我的项目,这是我通过清单称为名单内,但它让我通过并发修改称为一个错误。所以,我发现了这样一个解决方案:RecyclerView - 迭代乘我itens
//...
List<Checklist> desc = new ArrayList<>();
for (Iterator<Checklist> it = checklists.iterator(); it.hasNext();) {
Checklist check = it.next();
desc.add(new Checklist(check.getDescricao()));
loadRecycler(desc);
}
//...
但现在,我得到了一个其他的问题:我的项目是越来越重复每当我打开电视的时间。我怎么解决这个问题?按照下面的整个代码:
CheckListsFragment
public class ChecklistFragment extends Fragment {
@BindView(R.id.checklist_rcv_itens)
RecyclerView rvLista;
@BindView(R.id.checklist_btn_novoitem)
Button btnAddItem;
int valor;
BancoDAO bDAO;
private Checklist checklist;
private List<Checklist> checklists;
private ListChecklistAdapter listChecklistAdapter;
public ChecklistFragment() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bDAO = new BancoDAO(getContext());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_checklist, container, false);
Log.i("LOG", "onCreate()");
ButterKnife.bind(this, view);
checklist = new Checklist();
checklists = bDAO.listAllItens();
//It works, but multiply my items
List<Checklist> desc = new ArrayList<>();
for (Iterator<Checklist> it = checklists.iterator(); it.hasNext();) {
Checklist check = it.next();
desc.add(new Checklist(check.getDescricao()));
loadRecycler(desc);
}
/* It works, but multiply my items too
for (Checklist checklist : new ArrayList<>(checklists)) {
loadRecycler(checklists);
} */
return view;
}
private int cont() {
return valor++;
}
// add 1 item to the list
@OnClick(R.id.checklist_btn_novoitem)
void addItem() {
checklists = new ArrayList<>();
checklists.add(new Checklist("Teste " + (cont() + 1) + ""));
bDAO.inserir(new Checklist("Teste " + (cont() + 1) + ""));
loadRecycler(checklists);
Helper.snackbarFast(getView(), "Item adicionado");
return;
}
private void loadRecycler(List<Checklist> lista) {
if (listChecklistAdapter == null) {
Log.i("LOG", "IF");
listChecklistAdapter = new ListChecklistAdapter(getActivity(), lista);
rvLista.setAdapter(listChecklistAdapter);
rvLista.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));
rvLista.addItemDecoration(new DividerItemDecoration(getActivity(), 1));
return;
} else {
Log.i("LOG", "ELSE");
listChecklistAdapter.refreshData(lista);
}
}
也许如果您从循环中删除此行loadRecycler(desc);
这样的:
List<Checklist> desc = new ArrayList<>();
for (Iterator<Checklist> it = checklists.iterator(); it.hasNext();) {
Checklist check = it.next();
desc.add(new Checklist(check.getDescricao()));
}
loadRecycler(desc);
它看起来像要添加每次迭代列表。
试试这个。并注意我将循环外部的loadRecycler。如果你想在循环调用notifyItemChanged(mPos)中做一些更新。
List<Checklist> desc = new ArrayList<>();
Iterator<Checklist> it = checklists.iterator();
while (it.hasNext()) {
Checklist check = it.next();
desc.add(new Checklist(check.getDescricao()));
}
loadRecycler(desc);
另一方面你必须检查loadRecycler里面的逻辑是什么。问题应该在于你如何更新适配器。也许你正在添加项目而不是更新它。
它不断扩大我的项目... –
问题是否解决? – AndroidStorm
PROBLEMA RESOLVIDO 我刚搬来的loadRecycler()来跳出循环:
// ...
List<Checklist> desc = new ArrayList<>();
for (Iterator<Checklist> it = checklists.iterator(); it.hasNext();) {
Checklist check = it.next();
desc.add(new Checklist(check.getDescricao()));
loadRecycler(desc);
}
// ...
jajaja Problema Resolvido jaja – AndroidStorm
你有没有尝试使用,而不是为循环? – AndroidStorm
不,我没有...我如何编码? –
已发布回答 – AndroidStorm