2017-10-16 49 views
0

我试图使用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); 
     } 
    } 
+0

你有没有尝试使用,而不是为循环? – AndroidStorm

+0

不,我没有...我如何编码? –

+0

已发布回答 – AndroidStorm

回答

0

也许如果您从循环中删除此行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); 

它看起来像要添加每次迭代列表。

0

试试这个。并注意我将循环外部的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里面的逻辑是什么。问题应该在于你如何更新适配器。也许你正在添加项目而不是更新它。

+0

它不断扩大我的项目... –

+0

问题是否解决? – AndroidStorm

0

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); 
     } 
// ... 
+0

jajaja Problema Resolvido jaja – AndroidStorm