【问题标题】:Setting Adapter in recyclerview在回收站视图中设置适配器
【发布时间】:2016-04-27 19:12:47
【问题描述】:

我正在尝试使用 recyclerview 并设置适配器,但出现错误:-

没有连接适配器;跳过布局 所以请帮我解决这个问题

public class FragmentTwo extends Fragment {
private AppAdapter mAppAdapter;
private ArrayList<Model> mModel;
@Bind(R.id.recycler_view)
RecyclerView recyclerView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_two, container, false);
    ButterKnife.bind(this, v);
    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setAdapter(mAppAdapter);
    parseData();
    return v;
}

 private void parseData() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("url")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    ReqInterface reqInterface = retrofit.create(ReqInterface.class);
    Call<Model> call = reqInterface.getAdvanceData("france");
    call.enqueue(new Callback<Model>() {
        @Override
        public void onResponse(Call<Model> call, Response<Model> response) {
            Model model = response.body();
            mModel = new ArrayList<Model>(Arrays.asList(model));
            mAppAdapter = new AppAdapter(mModel);
            recyclerView.setAdapter(mAppAdapter);
            mAppAdapter.notifyDataSetChanged();
        }
        @Override
        public void onFailure(Call<Model> call, Throwable t) {
        }
     });
    }
  }

这是我的 Recyclerview 适配器类:-

public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> {
private ArrayList<Model> mModel;
TextView highTemp;

public AppAdapter(ArrayList<Model> model) {
    mModel = model;
}

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView highTemp;
    public ViewHolder(View view) {
        super(view);
        highTemp = (TextView) view.findViewById(R.id.card_view_tv_hightemp);
    }
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
    View view = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.fragment_two, viewGroup, false);
    return new ViewHolder(view);

}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    viewHolder.highTemp.setText(String.valueOf(mModel.getName);
}

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

提前致谢

【问题讨论】:

    标签: android android-fragments android-recyclerview


    【解决方案1】:

    您永远不会初始化适配器mAppAdapter,因此它在运行时为空。你错过了mAppAdapter = new AppAdapter(yourdata);之类的东西 在致电setAdapter之前。

    【讨论】:

    • 感谢@Juan Cortes 的回答我已将此添加到我的 parseData 方法 onedrive.live.com/…
    • 在这里发布您的代码,我没有从 onedrive 下载您的文件,抱歉
    • 相同。未连接适配器;跳过布局@Juan Cortes
    • 不是在触发回调时创建新适配器,而是将数据传递给现有适配器,即将构造函数更改为不需要数据,然后创建一个接收数据并设置它的方法,最后通知DatasetChanged。这应该工作你首先需要空适配器。
    【解决方案2】:

    您的适配器 mAppAdapter 从未初始化,即它为空。

    因此recyclerView.setAdapter(mAppAdapter);recyclerView.setAdapter(null); 相同,因此您实际上并没有设置适配器!

    记得初始化你的字段:

    mAppAdapter = new AppAdapter(mModel); // or whatever constructor you want
    recyclerView.setAdapter(mAppAdapter);
    

    【讨论】:

    【解决方案3】:

    改变

    recyclerView.setAdapter(mAppAdapter);
    

    recyclerView.setAdapter(new AppAdapter(model));
    

    【讨论】:

      【解决方案4】:

      你永远不会创建你的mAppAdapter

      要解决此问题,请创建适配器的新实例并将其传递到 .setAdapter 的参数中。

      换句话说,您应该使用.setAdapter(new AppAdapter(...)),其中... 替换为您在AppAdapter 中创建的参数。

      【讨论】:

        【解决方案5】:

        我通常在异步任务中进行改造调用,然后当您从服务器获得响应时,您创建一个新适配器并将其设置为 recyclerview。 无论如何,尝试从 onCreate() 方法中删除 .setAdapter 行,然后保持原样。 它可以工作并且不会崩溃,它崩溃的原因是因为适配器为空(它没有元素)。

        希望对你有帮助!

        【讨论】:

          猜你喜欢
          • 2017-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多