2017-10-16 22 views
0

私itensを掛ける私はチェックリストによって呼び出された私のリストの中にある私の項目を、一覧表示するforeachを使用しようとしていたが、それは私に同時変更によって呼び出されたエラーを得ました。だから、私はこのような解決策が見つかりました:RecyclerView - イテレータは

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

あなたは、forループを使用してみましたか? – 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

関連する問題