简体   繁体   中英

App doesn't display items on RecyclerView

I'm new to android studio. I'm trying to display items in RecycleView but it's doesn't show anything.

This is what android studio says:


E/RecyclerView: No layout manager attached; skipping layout

My Fragment:

public class Articles extends Fragment {
    View root;
    RecyclerView recyclerView;
    NewsList[] myListData = new NewsList[] {
            new NewsList("Article 1", "Some Author"),
            new NewsList("Article2", "Some Author"),
            new NewsList("Article3", "Some Author"),

    };


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);






    }
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        root = inflater.inflate(R.layout.fragment_articles, container, false);
        recyclerView = root.findViewById(R.id.recyclerView);
        NewsAdapter adapter = new NewsAdapter(myListData);
        recyclerView.setHasFixedSize(true);
        recyclerView.setAdapter(adapter);


        return root;
    }

Here is the code of my Adapter class:

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
    private NewsList[] listdata;

    // RecyclerView recyclerView;
    public NewsAdapter(NewsList[] listdata) {

        this.listdata = listdata;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View listItem= layoutInflater.inflate(R.layout.list_item, parent, false);
        ViewHolder viewHolder = new ViewHolder(listItem);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        final NewsList myListData = listdata[position];
        holder.textView1.setText(listdata[position].getTitle());
        holder.textView2.setText(listdata[position].getAuthor());
        holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(),"click on item: "+myListData.getTitle(),Toast.LENGTH_LONG).show();
            }
        });
    }


    @Override
    public int getItemCount() {
        return listdata.length;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView1;
        public TextView textView2;
        public RelativeLayout relativeLayout;
        public ViewHolder(View itemView) {
            super(itemView);
            this.textView1 = (TextView) itemView.findViewById(R.id.textView1);
            this.textView2 = (TextView) itemView.findViewById(R.id.textView2);
            relativeLayout = (RelativeLayout)itemView.findViewById(R.id.relativeLayout);
        }
    }

Previously I had an error where the app crashed when opened the fragment but now it's skips the RecyclerView. I will be gratefull if you help me to resolve this issue.

You need to add a layoutManager to your recycler view:

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        root = inflater.inflate(R.layout.fragment_articles, container, false);
        recyclerView = root.findViewById(R.id.recyclerView);
        NewsAdapter adapter = new NewsAdapter(myListData);
        recyclerView.setHasFixedSize(true);
        // Add this line
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()))
        recyclerView.setAdapter(adapter);


        return root;
    }

It's mandatory to have a Layout manager for your Recyclerview. For example, you can use a linear one by adding this after inflating your view:

recyclerView.setLayoutManager(new LinearLayoutManager( context ));

where context is whatever your context is

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