Android Recyclerview元素正在重复

时间:2017-08-29 17:51:00

标签: java android firebase android-recyclerview

我正在使用firebase制作应用。在这里,我将recyclerview与firebase实时数据库连接起来。但回收者的观点正在重复,不知道为什么。在点击下载时,会创建另一个相同的回收站视图元素。请帮助解决这个问题。提前致谢。 :) See Image here

适配器代码: -

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

4 个答案:

答案 0 :(得分:0)

调试您的应用程序并检查元素列表是否重复,或者您是否正在重用包含上一组的适配器数据(您可以在再次添加之前将其清除)

另外,请发布刷新内容的位置。

您只能更改RecyclerAdapter而不是创建新的RecyclerView

答案 1 :(得分:0)

首先,您的适配器代码很奇怪。特别是

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

基本上,您正在做的是告诉适配器每个索引都有一个新的项类型。这是错的。最佳做法是尽可能使用enum(即使只有一个)细胞类型。

至于其余的代码,它看起来还不错,但我会看一下在线教程如何制作一个不错的适配器

答案 2 :(得分:0)

无论您在何处加载数据,都会多次加载elementList(回收站视图的数据源)中的重复条目。

在填写数据之前,请务必检查列表是否为空或重复输入。

答案 3 :(得分:0)

 // try to add this hope it will work
   recyclerView.setHasFixedSize(true);