Я пытаюсь использовать RecyclerView во фрагменте, но я столкнулся с проблемой, мой список не отображается, и у меня есть эта ошибка:
E / RecyclerView: адаптер не подключен; пропускающий макет
Я проверял решения, видимо проблемы возникали когда:
Но я обратил внимание, я попробовал альтернативы, и я все еще сталкиваюсь с той же проблемой.
Вот мой код фрагмента:
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.gosia.weightapplication.databinding.FragmentHistoryBinding;
import com.example.gosia.weightapplication.model.WeightData;
import com.orhanobut.logger.Logger;
import com.raizlabs.android.dbflow.sql.language.SQLite;
import java.util.ArrayList;
import java.util.List;
public class HistoryFragment extends Fragment {
private List<WeightData> mWeightData = new ArrayList<>();
private FragmentHistoryBinding mFragmentHistoryBinding;
private ListAdapter mAdapter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_history, viewGroup, false);
//binding variable
mFragmentHistoryBinding = DataBindingUtil.setContentView(getActivity(), R.layout.fragment_history);
mFragmentHistoryBinding.setVariable(this);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//recycler
RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
// define an adapter
mAdapter = new ListAdapter(mWeightData, getContext());
recyclerView.setAdapter(mAdapter);
prepareWeightData();
}
private void prepareWeightData() {
mWeightData = SQLite.select().
from(WeightData.class).queryList();
Logger.d(mWeightData.toString()); //The list isn't null, I have data to show
mAdapter.notifyDataSetChanged();
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="variable"
type="com.example.gosia.weightapplication.HistoryFragment" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorWhite"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBlack">
</View>
</LinearLayout>
</layout>
Код ListAdapter:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.gosia.weightapplication.model.WeightData;
import java.util.List;
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {
private List<WeightData> mList;
private Context mContext;
private final LayoutInflater mLayoutInflater;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView date, weight;
public ImageView image;
public ViewHolder(View v) {
super(v);
date = v.findViewById(R.id.text_view_date);
weight = v.findViewById(R.id.text_view_weight);
image = v.findViewById(R.id.image);
}
}
public ListAdapter(List<WeightData> plist, Context pContext) {
this.mList = plist;
this.mContext = pContext;
this.mLayoutInflater = LayoutInflater.from(this.mContext);
}
@Override
public ListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = this.mLayoutInflater.inflate(R.layout.item_weight_history, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//set data
WeightData weightData = mList.get(position);
holder.date.setText(weightData.getLastDayWeightMeasurement());
holder.weight.setText(weightData.getWeight());
}
@Override
public int getItemCount() {
return mList.size();
}
}
И моя активность правильно расширяется android.support.v7.app.AppCompatActivity
Любая помощь будет оценена
Редактировать: очевидно, это связано с этим DataBindingUtil?