java - Android Recyclerview 元素重复

标签 java android firebase android-recyclerview android-adapter

我正在使用 firebase 制作一个应用程序。这里我将recyclerview与firebase实时数据库连接起来。但是recyclerview一直重复,不知道为什么。单击下载后会创建另一个相同的回收器 View 元素。请帮助解决这个问题。提前致谢。 :)

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

主要 Activity 回收器 View :-

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

最佳答案

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

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

基本上,您所做的就是告诉适配器对于每个索引都有一个新的项目类型。这是错误的。最佳实践是拥有一个包含所有可能(即使只有一种)细胞类型的枚举

至于代码的其余部分,看起来不错,但是我会看看在线可用的教程如何制作一个像样的适配器

关于java - Android Recyclerview 元素重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45945437/

相关文章:

java - Mockito 验证匹配 数组的可选

java - 使用java处理规范化中的回车

android - 不使用实时绑定(bind)以编程方式构建 TListView

java - 更新到最新版本 4.3.7 后找不到 ID 为 'com.google.gms.google-services' 的插件

android - 为android中的应用程序制作小部件

javascript - 类型错误 : children is not a function

java - 如何在Firebase中获取 child 的数据

java - java中不可选择的覆盖

java - 遍历列表时获取 ConcurrentException

firebase - React-native ListView排序数据