2017-10-16 4 views
0

je tentais d'utiliser le foreach à la liste de mon article, qui est à l'intérieur de ma liste appelée par listes de contrôle, mais il m'a appelé une erreur par modification concurrente. Donc, j'ai trouvé une solution comme ceci:RecyclerView - Iterator multiplier mes 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); 
      } 
    //... 

Mais maintenant, je suis un autre problème: mes articles est se dupliqués chaque fois que j'ouvre l'écran. Comment puis-je résoudre ce problème? Suivez tout le code ci-dessous:

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

Avez-vous essayez d'utiliser tout au lieu de boucle? – AndroidStorm

+0

Non, je n'ai pas ... Comment puis-je coder ceci? –

+0

a posté une réponse – AndroidStorm

Répondre

0

Peut-être que si vous supprimez cette ligne loadRecycler(desc); de votre boucle comme ceci:

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); 

il semble que vous ajoutez la liste à chaque itération.

0

Essayez ceci. Et remarquez que je déplace le loadRecycler en dehors de la boucle. Si vous voulez faire une mise à jour à l'intérieur de la boucle appelez 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); 

Et d'autre part, vous devez vérifier quelle est la logique dans loadRecycler. Le problème devrait être dans la façon dont vous mettez à jour l'adaptateur. Peut-être que vous ajoutez les éléments au lieu de le mettre à jour.

+0

Il continue à multiplier mes articles ... –

+0

est le problème résolu? – AndroidStorm

0

PROBLEMA resolvido Je viens de déménager le loadRecycler() pour sortir de la boucle:

// ... 
     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