【问题标题】:App crash on using RecyclerView使用 RecyclerView 时应用程序崩溃
【发布时间】:2015-04-24 18:28:04
【问题描述】:

我在我的应用程序中使用 RecyclerView。我的应用程序因以下错误而崩溃

java.lang.NullPointerException: 尝试调用虚拟方法 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget. RecyclerView$State, int, int)' 在空对象引用上

在 stackoverflow 上搜索时,我发现这个错误通常是在未添加 layoutmanager 时出现的。但是我已经添加了布局管理器。请帮我找出导致此崩溃的原因。

编辑 - 使用 Recyclerview 的片段代码

public class FeedFragment extends Fragment implements HJAppConstants {

    private RecyclerView mRecyclerView;

    private FeedRecyclerAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.hj_feed_layout, null);
        mRecyclerView = (RecyclerView) view
                .findViewById(R.id.feeds_recycler_view);
        return view;
    }

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

        LinearLayoutManager layoutManager = new LinearLayoutManager(
                getActivity());
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(layoutManager);
        mAdapter = new FeedRecyclerAdapter();
        mRecyclerView.setAdapter(mAdapter);
        addData();

    }

    /**
     * Adds static data
     */
    private void addData() {
        ArrayList<HJFeedItemObject> itemObjs = new ArrayList<HJFeedItemObject>();
        itemObjs.add(new HJFeedItemObject(HJ_FEED_TYPE_PHOTO,
                "potala_palace.jpg", "This is an article about Potala Palace",
                "Thu 7, 07:45pm", new HJUserObject("Umesh", "")));
        itemObjs.add(new HJFeedItemObject(HJ_FEED_TYPE_PRODUCT, "pokhara.jpg",
                "A beautiful place to visit - Pokhara ", "Thu 7, 07:45pm",
                new HJUserObject("Umesh", "")));
        itemObjs.add(new HJFeedItemObject(HJ_FEED_TYPE_ARTICLE, "patan.jpg",
                "A Tourist attraction - Patan", "Thu 7, 07:45pm",
                new HJUserObject("Umesh", "")));
        itemObjs.add(new HJFeedItemObject(HJ_FEED_TYPE_PHOTO,
                "potala_palace.jpg", "This is an article about Potala Palace",
                "Thu 7, 07:45pm", new HJUserObject("Umesh", "")));
        itemObjs.add(new HJFeedItemObject(HJ_FEED_TYPE_PRODUCT, "pokhara.jpg",
                "A beautiful place to visit - Pokhara ", "Thu 7, 07:45pm",
                new HJUserObject("Umesh", "")));
        itemObjs.add(new HJFeedItemObject(HJ_FEED_TYPE_ARTICLE, "patan.jpg",
                "A Tourist attraction - Patan", "Thu 7, 07:45pm",
                new HJUserObject("Umesh", "")));
        mAdapter.addData(itemObjs);
    }

【问题讨论】:

  • 显示代码没有它没有任何帮助
  • 我已经发布了我的代码
  • 我认为这是一个片段,因此将代码从 onActivityCreated 移动到 onViewCreated 应该可以解决问题
  • 我将内容移动到 onViewCreated 但仍然遇到同样的问题。
  • 你是把onActivityCreated的代码移到onViewCreated还是直接放到onCreateView,onActivityCreated只是告诉fragment这个activity是用自己的onCreate完成的,并不代表fragment已经创建还没有。

标签: android android-recyclerview


【解决方案1】:

当没有为 RecyclerView 提供 LayoutManager 时会出现此问题。

更改您的代码,并将 layoutManager 设置移动到 onCreateView。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){

   View view = inflater.inflate(R.layout.hj_feed_layout, null);
   mRecyclerView = (RecyclerView) view
                .findViewById(R.id.feeds_recycler_view);

   LinearLayoutManager layoutManager = new LinearLayoutManager(
                getActivity());
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(layoutManager);

   return view;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多