当前位置: 首页 > 知识库问答 >
问题:

E/回收器视图: 未连接适配器;跳过回收器上的布局查看片段内部

韦阳晖
2023-03-14

我有“E/RecyclerView:没有连接适配器;跳过布局”错误消息。我在片段中有recycleView,所以我一定是在fragment1.java上做错了什么。

这是代码。如您所见,我在代码上设置了适配器,但我收到此错误。任何帮助将不胜感激。谢谢。

公共类Fragment1扩展片段{

private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Bible> arrayList;
private FirebaseDatabase database;
private DatabaseReference databaseReference;


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment1, container, false);

    recyclerView = rootView.findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    //GridLayoutManager layoutManager = new GridLayoutManager(getContext(),  2);
    layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(layoutManager);


    arrayList = new ArrayList<>();

    database = FirebaseDatabase.getInstance();
    databaseReference = database.getReference("Bible");

    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            arrayList.clear();
            for(DataSnapshot snapshot: dataSnapshot.getChildren()){
                Bible bible = snapshot.getValue(Bible.class);
                arrayList.add(bible);

            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

            Log.e("fragment1", String.valueOf(databaseError.toException()));//에러문 출력
        }
    });

    adapter = new BibleAdapter(arrayList, getContext());
    recyclerView.setAdapter(adapter);






    return rootView;
}

}

公共类圣经适配器扩展回收器View.Adapter {

private  ArrayList<Bible> arrayList;
private  Context context;
private OnVerseItemClickListener listener;

public BibleAdapter(ArrayList<Bible> arrayList, Context context) {
    this.arrayList = arrayList;
    this.context = context;
}

public void setOnItemClickListener(OnVerseItemClickListener listener){
    this.listener = listener;
}

@NonNull
@Override
public BibleAdapter.BibleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.verse_item, parent, false);
    BibleViewHolder holder = new BibleViewHolder(view, listener);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull BibleAdapter.BibleViewHolder holder, int position) {
    Glide.with(holder.imageView)
            .load(arrayList.get(position).getImage())
            .into(holder.imageView);
    holder.bibleType.setText(arrayList.get(position).getBibleType());
    holder.keysentance.setText(arrayList.get(position).getKeysentance());
    holder.verse.setText(arrayList.get(position).getVerse());

}

@Override
public int getItemCount() {
    return (arrayList!=null? arrayList.size():0);
}

public class BibleViewHolder extends RecyclerView.ViewHolder{

    ImageView imageView;
    TextView bibleType;
    TextView verse;
    TextView keysentance;

    public BibleViewHolder(@NonNull View itemView, final OnVerseItemClickListener listener) {
        super(itemView);
        this.imageView = itemView.findViewById(R.id.imageView);
        this.bibleType = itemView.findViewById(R.id.bibleType);
        this.keysentance = itemView.findViewById(R.id.keysentance);
        this.verse = itemView.findViewById(R.id.verse);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();
                if(listener != null){
                    listener.onItemClick(BibleViewHolder.this, v, position);
                }
            }
        });
    }
}

}

共有1个答案

胥智
2023-03-14

在您的代码中,您创建了带有空arrayList的适配器,但之后您永远不会更新列表。

在适配器中创建swapData()方法,并在必须刷新数据或刷新数据时调用它,在这种情况下,您将在onDataChange()中获取它。

并在添加侦听器之前定义适配器:

adapter = new BibleAdapter(arrayList, getContext());
        recyclerView.setAdapter(adapter);

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                arrayList.clear();
                for(DataSnapshot snapshot: dataSnapshot.getChildren()){
                    Bible bible = snapshot.getValue(Bible.class);
                    arrayList.add(bible);
                }
                  adapter.swapData(arrayList);
                //adapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

                Log.e("fragment1", String.valueOf(databaseError.toException()));//에러문 출력
            }
        });

在适配器类中创建方法为:

public void swapData(ArrayList<Bible> filtersList) {
    if (filtersList != null) {
        this.arrayList.clear();
        this.arrayList.addAll(filtersList);
        notifyDataSetChanged();
    }
}
 类似资料:
  • 我根据类似问题的答案修改了代码,但没有一个有效。我正在使用TabFragments和RecyclerViews。控制台显示错误“E/RecyclerView:No adapter attached;kipping layout”四次。 (当修改它也给了我错误java.lang.NullPointerException:试图调用虚方法'voidandroid.support.v7.widget.Re

  • 图像不显示。在一个SO例子中说要检查适配器中的计数,但我认为它是正确的。我在logcat中得到这个错误 这是代码主活动 这是我的适配器。

  • 我收到以下错误:“RecyclerView:未连接适配器;跳过布局”,但我已连接适配器...我尝试了许多不同的方法,但我无法解决错误。 我正在使用Volley库获取数据。当我启动活动时,只有进度条可见,直到结束,我收到上面的Logcat消息。我在中添加了带有适配器的。你能帮我吗? 这是我的代码: 主活动 地震适配器 MainActivity.xml 地震法。xml

  • 当试图从API获取JSON数据并在RecyclerView上显示时,我得到以下错误: 我已经使用RecyclerView有时,我从来没有这个问题。 主要活动: 适配器: 取景框: 我搜索了很多如何解决这个错误,但我不能。

  • 我有一个带有recycler视图的活动,当我单击其中的一个项目时,它会导致带有另一个recycler视图的活动。然而,它一直给我一个“E/RecyclerView:没有适配器连接;跳过布局”错误。 这是onCreate()方法: 我看到了另一个类似于此的问题,即在运行其他线程之前连接适配器,但我不认为在这个活动中还有其他线程在运行。getBundleData()只执行以下操作:

  • 它给了我“回收站视图:没有连接适配器;跳过布局“错误,但在我看来适配器已正确连接。请帮忙。 我正在移动我的方法,但它不起作用。我在这里寻找答案,但只有错误实现的适配器存在问题。我不知道这里出了什么问题。