2017-08-29 35 views
-1

我正在使用Firebase製作應用。在這裏,我將recyclerview與Firebase實時數據庫連接起來。但是回收商的觀點正在重複,不知道爲什麼。點擊下載,創建另一個相同的回收站視圖元素。請幫助解決這個問題。提前致謝。 :) 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

請發佈您的firebase recyler adupter代碼 – Hamza

+0

它可能你附加listeneron兩個請 – Hamza

回答

0

調試您的應用程序,並檢查元素列表中得到複製或正在重用的適配器數據包含以前的設置(您可以在再次添加之前將其清除)

另外,請張貼刷新的地方內容。

您只可以改變的,而不是創建一個新的RecyclerView

+0

請你詳細說明:) –

+0

這是根據你的老問題,現在檢查 –

0

第一的RecyclerAdapter,你的適配器代碼是怪異。特別是

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

基本上,你正在做的是告訴適配器,爲每個索引有一個新的項目類型。這是錯誤的。最佳做法是使用所有可能的(即使只有一個)單元格類型的enum

對於代碼的其餘部分,它看起來不錯,不過,我想看看網上提供的教程如何使一個像樣的適配器

+0

感謝您的答案,但爲什麼元素重複自己? –

+0

@KanishqGupta這是我的一篇文章。嘗試遵循它,你應該是好的https://medium.com/androidsolutions/recyclerview-adapters-4d39a24da3c0 –

0

無論您正在加載數據,已經加載多次創造elementList中的重複條目(您的回收商視圖的數據源)。

確保在填寫數據前檢查列表是否爲空或重複條目。