【发布时间】:2019-04-07 18:36:25
【问题描述】:
我正在使用 Fragment 来查看 RecyclerView。但我总是得到这个错误
E/RecyclerView:没有附加适配器;跳过布局
我为我的 recyclerview 创建了一个适配器,但布局没有显示。 php后端工作正常。有人可以帮忙吗?这是我的片段和适配器代码
Tips.java
public class Tips extends Fragment {
Configuration config = new Configuration();
String HttpUrl = config.viewtips_url;
List<TipModel> tipList;
RecyclerView recyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_tips, container, false);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
tipList = new ArrayList<>();
loadTips();
return view;
}
private void loadTips() {
StringRequest stringRequest = new StringRequest(Request.Method.GET, HttpUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
tipList.add(new TipModel(
jsonObject.getInt("id"),
jsonObject.getString("tip")
));
}
TipAdapter tipAdapter = new TipAdapter(getActivity(), tipList);
recyclerView.setAdapter(tipAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
Volley.newRequestQueue(getActivity()).add(stringRequest);
}
TipAdapter.java
public class TipAdapter extends RecyclerView.Adapter<TipAdapter.TipViewHolder> {
private Context context;
private List<TipModel> tipList;
public TipAdapter(Context context, List<TipModel> tipList) {
this.context = context;
this.tipList = tipList;
}
@Override
public TipViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.itemlayout, null);
return new TipViewHolder(view);
}
@Override
public void onBindViewHolder(TipViewHolder holder, int position) {
TipModel tipModel = tipList.get(position);
holder.textViewTip.setText(tipModel.getTip());
}
@Override
public int getItemCount() {
return tipList.size();
}
class TipViewHolder extends RecyclerView.ViewHolder {
TextView textViewTip;
public TipViewHolder(View view) {
super(view);
textViewTip = view.findViewById(R.id.textViewTip);
}
}
【问题讨论】:
-
你在哪里打电话
loadTips()? -
虽然,你最好 1. 将
adapter分配给onCreateViewHolder()内的recyclerView,2. 添加一个adapter.updateWith(List<TipModel> tipList)3. 并使用从中获取的tipList更新适配器StringRequest -
@SumitAnantwar 什么?为什么要将适配器分配给适配器 inside 的 RecyclerView?
-
@SumitAnantwar 我已经编辑了上面的代码。尽管 RecyclerView: 没有附加适配器,但布局已经显示;跳过布局错误仍在我的日志中。这是我应该担心的事情吗?
-
您必须在 Fragment 的
onCreateViewHolder()中分配适配器。您收到此错误是因为在第一个布局周期中,回收器没有附加任何适配器。这主要是错误的。回收器应该附加一个适配器,并且在 StringRequest 之前,适配器的数据存储应该是空的。当StringRequest完成时,您将传入获取的数据并调用notifyDataSetChanged()。这将使用新数据重新加载回收器。
标签: android android-recyclerview