简体   繁体   中英

Fragment - E/RecyclerView: No adapter attached; skipping layout

I've tried nearly everything but the Recycleview is not showing up on screen. I keep getting this error 'E/RecyclerView: No adapter attached; skipping layout'. Been trying to fix this on and off for a couple of days now.

As a side note I am using a Fragment, which is probably why is this giving me hell.

uploadsFragment.java

private RecyclerView mRecylcerView;
    private ImageAdapter mAdapter;
    private ProgressBar mProgressCircle;
    private DatabaseReference mDatabaseRef;
    private List<Upload> mUploads;

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

        mRecylcerView = 
        (RecyclerView)view.findViewById(R.id.RecyclerView);
        mRecylcerView.setHasFixedSize(true);
        mRecylcerView.setLayoutManager(new 
LinearLayoutManager(getActivity()));
        mProgressCircle =                                     
        (ProgressBar)view.findViewById(R.id.progress_circle2);
    mUploads = new ArrayList<>();
    mDatabaseRef = FirebaseDatabase.getInstance().getReference("uploads");

    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
                Upload upload = postSnapshot.getValue(Upload.class);
                mUploads.add(upload);
            }

            mAdapter = new ImageAdapter(getActivity(), mUploads);
            mRecylcerView.setHasFixedSize(true);
            mRecylcerView.setLayoutManager(new 
            LinearLayoutManager(getActivity()));
            mRecylcerView.setAdapter(mAdapter);
            mProgressCircle.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(getActivity(),databaseError.getMessage(), 
Toast.LENGTH_SHORT).show();
            mProgressCircle.setVisibility(View.INVISIBLE);
        }
    });

    return view;
}

ImageAdapter.java

private Context mContext;
private List<Upload> mUploads;

public ImageAdapter(Context context, List<Upload> upload){
    mContext = context;
    mUploads = upload;
}

@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(mContext).inflate(R.layout.image_item, viewGroup, false);
    return new ImageViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ImageViewHolder imageViewHolder, int i) {
    Upload uploadCurrent = mUploads.get(i);
    imageViewHolder.textViewName.setText(uploadCurrent.getName());
    Picasso.get()
            .load(uploadCurrent.getmImageUrl())
            .placeholder(R.mipmap.ic_launcher)
            .fit()
            .centerCrop()
            .into(imageViewHolder.imageView);
}

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

public class ImageViewHolder extends RecyclerView.ViewHolder{

    public TextView textViewName;
    public ImageView imageView;

    public ImageViewHolder(@NonNull View itemView) {
        super(itemView);

        textViewName = itemView.findViewById(R.id.text_view_name);
        imageView = itemView.findViewById(R.id.image_view_upload);
    }
}

You are setting up adapter with RecyclerView after getting response from firebase query.

  1. So first make sure that your firebase query returns successful response.
  2. Check if "mUploads" list is not blank after getting response.

Replace LayoutInflater.from(mContext).inflate(R.layout.image_item, viewGroup, false); with : LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.image_item, viewGroup, false);

Plus place your code in your onViewCreated instead of onCreateView

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM