没有适配器;在片段

时间:2017-04-22 14:46:13

标签: android android-fragments android-recyclerview recycler-adapter

我片段中的Recyclerview给了我这个错误,但我无法弄明白。关于这个问题有很多问题,但到目前为止它们都没有解决我的问题。

以下是我片段中的一段代码:

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

    View view = inflater.inflate(R.layout.fragment_home, container, false);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);

    recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);

    initCollapsingToolbar();

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);

    prepareSectors();

    try {
      Glide.with(this).load(R.drawable.cover).into((ImageView) view.findViewById(R.id.backdrop));
    } catch (Exception e) {
      e.printStackTrace();
    }

    return view;
  }

2 个答案:

答案 0 :(得分:1)

在将instance设置为adapter之前,您未创建RecyclerView。{/ p>

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    // Your adapter initialization here
    adapter = new YourAdapter(getActivity(), ....);
    recyclerView.setAdapter(adapter);

<强>更新

LayoutInflater获取context。更新您的SectorAdapter代码部分,如下所示:

public Context mContext; 
public List<Sector> sectorList;
LayoutInflater layoutInflater;

public SectorAdapter(Context mContext, List<Sector> sectorList) {
    this.mContext = mContext;
    this.sectorList = sectorList;
    layoutInflater = LayoutInflater.from(mContext);
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = layoutInflater.inflate(R.layout.sector_card, parent, false);
    return new MyViewHolder(itemView);
}

尝试将RecyclerView代码移至onViewCreated()

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    sectorList = new ArrayList<>(); 
    prepareSectors(); 

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true)); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 

    adapter = new SectorAdapter(getActivity(), sectorList);
    recyclerView.setAdapter(adapter);
}

希望这会有所帮助〜

答案 1 :(得分:1)

您的适配器没有任何代码。因此,您需要实现适配器并将实例传递给recyclerView。

RecyclerView.LayoutManager mLayoutManager ....
 ....
// Your adapter initialization here
adapter = new someAdapter(....);
recyclerView.setAdapter(adapter);

这会对你有所帮助!