2017-08-29 15 views
-1

firebaseを使用してアプリを作っています。ここで私は、firebaseリアルタイムデータベースとrecyclerviewを接続しています。しかし、リサイクラーの見解は繰り返されていますが、理由はわかりません。ダウンロードをクリックすると、別の同じリサイクラビュー要素が作成されます。 Plsは、この問題を解決するのに役立ちます。前もって感謝します。 :) See Image hereAndroid Recyclerviewの要素が繰り返されています

アダプターコード: -

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_view, parent, false); 
    ViewHolder viewHolder = new ViewHolder(v); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 

    elements elements = elementses.get(position); 
    holder.t1.setText(elements.getTitle()); 
    final String s1 = elements.getPdf(); 
    holder.b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); 
      CustomTabsIntent customTabsIntent = builder.build(); 
      customTabsIntent.launchUrl(context, Uri.parse(s1)); 

     } 
    }); 




} 

@Override 
public int getItemCount() { 
    return elementses.size(); 

} 

class ViewHolder extends RecyclerView.ViewHolder { 

    public TextView t1; 
    public Button b1; 


    public ViewHolder(View itemView) { 
     super(itemView); 
     t1 = (TextView)itemView.findViewById(R.id.title); 
     b1 = (Button)itemView.findViewById(R.id.download_btn); 
    } 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

主な活動リサイクラービュー: -

recyclerView = (RecyclerView) findViewById(R.id.recycler_main); 
    recyclerView.hasFixedSize(); 
    recyclerView.setLayoutManager(new 
    LinearLayoutManager(getApplicationContext())); 
    elementsList = new ArrayList<>(); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 
    main_adapter = new Main_Adapter(getApplicationContext(),elementsList); 
    recyclerView.setLayoutManager(new 
    LinearLayoutManager(getApplicationContext(), 
    LinearLayoutManager.VERTICAL, false)); 
    recyclerView.setAdapter(main_adapter); 
    main_adapter.notifyDataSetChanged(); 
    recyclerView.setNestedScrollingEnabled(false); 
    recyclerView.setHasFixedSize(true); 
+0

データをロードする前に使用したリストまたはデータを消去します。 –

+0

が、あなたが2下さい – Hamza

+0

を投稿してください - ポスト更新:) – Hamza

答えて

0

デバッグアプリケーションと要素のリストが重複して取得されるか、アダプターを再利用しているかどうかを確認前のセットを含むデータ(再度追加する前にクリアすることができます)

また、コンテンツ。

あなただけの代わりに、

+0

をあなたは:)あなたの古い質問に基づいていた –

+0

を詳しく説明してくださいすることができ、あなたの答えのために今 –

0

まず新しいRecyclerViewを作成するRecyclerAdapterを変更することができ、アダプタのコードが奇妙です。特に

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

基本的には、各インデックスに対して新しいアイテムタイプがあることをアダプタに伝えることです。これは間違っています。ベストプラクティスは、可能な限りすべて1つのセルタイプでenumを持つことです。コードの残りの部分については、それは私はあなたがデータをロードしているどこ

+0

感謝をチェックしますが、なぜ要素が繰り返しているのか? –

+0

@KanishqGuptaはここに私の記事です。それに従ってみてください。あなたは良いはずですhttps://medium.com/androidsolutions/recyclerview-adapters-4d39a24da3c0 –

0

まともなアダプタを作る方法をオンラインで入手可能なチュートリアルを見ているだろうが、それが複数回作成をロードされた、[OK]を探します

elementList(リサイクラービューのデータソース)に重複した項目があります。

データを入力する前に、リストが空であるか、重複したエントリがないかどうかを確認してください。

関連する問題