【问题标题】:App doesn't display items on RecyclerView应用程序不会在 RecyclerView 上显示项目
【发布时间】:2021-03-29 08:38:14
【问题描述】:

我是安卓工作室的新手。我正在尝试在 RecycleView 中显示项目,但它没有显示任何内容。

这是 android studio 所说的:


E/RecyclerView: No layout manager attached; skipping layout

我的片段:

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

这是我的适配器类的代码:

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

之前我遇到了一个错误,即应用程序在打开片段时崩溃,但现在它跳过了 RecyclerView。 如果您能帮我解决这个问题,我将不胜感激。

【问题讨论】:

标签: java android android-studio android-layout android-fragments


【解决方案1】:

您的 Recyclerview 必须有一个布局管理器。例如,您可以通过在膨胀视图后添加它来使用线性:

recyclerView.setLayoutManager(new LinearLayoutManager( context ));

上下文就是你的上下文

【讨论】:

  • 我尝试了该方法,它说它不是正确的上下文,所以我尝试了 Luca Pizzini 方法。仍然感谢您的帮助:)!
  • 我的错,这里的上下文必须是 getActivity() 而不是“this”。我在 Kotlin 编程,所以不太一样,但我昨天遇到了这个确切的问题
【解决方案2】:

您需要将layoutManager 添加到您的回收站视图中:

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

【讨论】:

  • 感谢您的回答!它奏效了。我知道我需要 LinearLayoutManager 但我不知道如何在我的情况下使用它,因为我是 android studio 的新手。谢谢您的帮助。 :)
  • 在初始化回收站视图时,您总是需要为它设置一个布局管理器。根据您需要为列表设置的布局类型,有不同类型的布局管理器。 LinearLayoutManager 是其中最简单的。有关更多信息,请参阅developer.android.com/guide/topics/ui/layout/recyclerview
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 2017-07-04
  • 2015-07-17
  • 2018-02-16
  • 1970-01-01
相关资源
最近更新 更多