Android:RecyclerView:未连接适配器;跳过布局
当显示RecyclerView列表时,我不断收到错误“RecyclerView:未连接适配器;跳过布局”。我有3个选项卡,其中一个选项卡有一个从SQLite数据库填充的RecyclerView列表。我没有得到任何崩溃,数据在视图中正确显示,但我仍然得到这个错误 我认为这只是一个警告,因为数据已经正确就位,但当我尝试onClick时,它不起作用,我确信这与此错误有关 我知道这个问题以前被问过很多次,但我检查了大部分问题,没有一个对我有用 这是我的片段:Android:RecyclerView:未连接适配器;跳过布局,android,android-fragments,android-adapter,android-recyclerview,Android,Android Fragments,Android Adapter,Android Recyclerview,当显示RecyclerView列表时,我不断收到错误“RecyclerView:未连接适配器;跳过布局”。我有3个选项卡,其中一个选项卡有一个从SQLite数据库填充的RecyclerView列表。我没有得到任何崩溃,数据在视图中正确显示,但我仍然得到这个错误 我认为这只是一个警告,因为数据已经正确就位,但当我尝试onClick时,它不起作用,我确信这与此错误有关 我知道这个问题以前被问过很多次,但我检查了大部分问题,没有一个对我有用 这是我的片段: public class RecentsFr
public class RecentsFragment extends Fragment {
DatabaseHelper helper;
List<MyPojo> dbList;
RecyclerView mRecyclerView;
private MyGridAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.my_recents_list, container, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
mRecyclerView.setHasFixedSize(true);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
dbList = new ArrayList<MyPojo>();
dbList = getCat(); // getCat returns array list from sqlite database
mAdapter = new MyGridAdapter(dbList);
mRecyclerView.setAdapter(mAdapter);
}
}
public class MyGridAdapter extends RecyclerView.Adapter<MyGridAdapter.ViewHolder> {
static List<MyPojo> dbList;
static Context context;
MyGridAdapter(Context context, List<MyPojo> dbList){
this.dbList = new ArrayList<MyPojo>();
this.context = context;
this.dbList = dbList;
}
MyGridAdapter(List<MyPojo> dbList){
this.dbList = new ArrayList<MyPojo>();
this.dbList = dbList;
}
@Override
public MyGridAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
R.layout.categories_item, null);
ViewHolder viewHolder = new ViewHolder(itemLayoutView);
return viewHolder;
}
@Override
public void onBindViewHolder(final MyGridAdapter.ViewHolder holder, int position) {
holder.title.setText(dbList.get(position).getCat());
}
@Override
public int getItemCount() {
return dbList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView title;
public LinearLayout placeHolder;
ImageView image;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
title = (TextView) itemLayoutView.findViewById(R.id.placeName);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailsActivity.class);
Bundle extras = new Bundle();
extras.putInt("catid", dbList.get(getAdapterPosition()).getCatid());
intent.putExtras(extras);
context.startActivity(intent);
}
}
}
公共类RecentsFragment扩展片段{
数据库助手;
列表数据库列表;
回收视图mRecyclerView;
私有MyGridAdapter mAdapter;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
最终视图=充气机。充气(R.layout.my\u recents\u list,container,false);
mRecyclerView=(RecyclerView)view.findviewbyd(R.id.RecyclerView);
setLayoutManager(新的GridLayoutManager(getActivity(),2));
mRecyclerView.setHasFixedSize(true);
返回视图;
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
设置选项菜单(真);
dbList=newarraylist();
dbList=getCat();//getCat从sqlite数据库返回数组列表
mAdapter=newmygridadapter(dbList);
mRecyclerView.setAdapter(mAdapter);
}
}
我的适配器:
public class RecentsFragment extends Fragment {
DatabaseHelper helper;
List<MyPojo> dbList;
RecyclerView mRecyclerView;
private MyGridAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.my_recents_list, container, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
mRecyclerView.setHasFixedSize(true);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
dbList = new ArrayList<MyPojo>();
dbList = getCat(); // getCat returns array list from sqlite database
mAdapter = new MyGridAdapter(dbList);
mRecyclerView.setAdapter(mAdapter);
}
}
public class MyGridAdapter extends RecyclerView.Adapter<MyGridAdapter.ViewHolder> {
static List<MyPojo> dbList;
static Context context;
MyGridAdapter(Context context, List<MyPojo> dbList){
this.dbList = new ArrayList<MyPojo>();
this.context = context;
this.dbList = dbList;
}
MyGridAdapter(List<MyPojo> dbList){
this.dbList = new ArrayList<MyPojo>();
this.dbList = dbList;
}
@Override
public MyGridAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
R.layout.categories_item, null);
ViewHolder viewHolder = new ViewHolder(itemLayoutView);
return viewHolder;
}
@Override
public void onBindViewHolder(final MyGridAdapter.ViewHolder holder, int position) {
holder.title.setText(dbList.get(position).getCat());
}
@Override
public int getItemCount() {
return dbList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView title;
public LinearLayout placeHolder;
ImageView image;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
title = (TextView) itemLayoutView.findViewById(R.id.placeName);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailsActivity.class);
Bundle extras = new Bundle();
extras.putInt("catid", dbList.get(getAdapterPosition()).getCatid());
intent.putExtras(extras);
context.startActivity(intent);
}
}
}
公共类MyGridAdapter扩展了RecyclerView.Adapter{
静态列表dbList;
静态语境;
MyGridAdapter(上下文上下文,列表dbList){
this.dbList=new ArrayList();
this.context=上下文;
this.dbList=dbList;
}
MyGridAdapter(列表dbList){
this.dbList=new ArrayList();
this.dbList=dbList;
}
@凌驾
public MyGridAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemLayoutView=LayoutFlater.from(parent.getContext()).inflate(
R.layout.categories\u项,空);
ViewHolder ViewHolder=新的ViewHolder(itemLayoutView);
返回视图持有者;
}
@凌驾
public void onBindViewHolder(最终MyGridAdapter.ViewHolder,int位置){
holder.title.setText(dbList.get(position.getCat());
}
@凌驾
public int getItemCount(){
返回dbList.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公共文本视图标题;
公共线路布局占位符;
图像视图图像;
公共视图持有者(视图项布局视图){
超级(itemLayoutView);
title=(TextView)itemLayoutView.findViewById(R.id.placeName);
}
@凌驾
公共void onClick(视图v){
意向意向=新意向(上下文、DetailsActivity.class);
Bundle extras=新Bundle();
putInt(“catid”,dbList.get(getAdapterPosition()).getCatid());
意图.临时演员(临时演员);
背景。开始触觉(意图);
}
}
}
提前谢谢
更新:my\u recents\u list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".RecentsFragment">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f8f8f8"
android:divider="@null"
android:listSelector="@android:color/transparent"/>
</LinearLayout>
要避免此错误,请避免在CreateView方法中执行findViewById,而是在onViewCreated中执行
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.my_recents_list, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
mRecyclerView.setHasFixedSize(true);
setHasOptionsMenu(true);
dbList = new ArrayList<MyPojo>();
dbList = getCat(); // getCat returns array list from sqlite database
mAdapter = new MyGridAdapter(getActivity(), dbList);
mRecyclerView.setAdapter(mAdapter);
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(R.layout.my\u recents\u list,container,false);
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
mRecyclerView=(RecyclerView)view.findviewbyd(R.id.RecyclerView);
setLayoutManager(新的GridLayoutManager(getActivity(),2));
mRecyclerView.setHasFixedSize(true);
设置选项菜单(真);
dbList=newarraylist();
dbList=getCat();//getCat从sqlite数据库返回数组列表
mAdapter=新的MyGridAdapter(getActivity(),dbList);
mRecyclerView.setAdapter(mAdapter);
}
编辑
您的适配器应该如下所示:
public class MyGridAdapter extends RecyclerView.Adapter<MyGridAdapter.ViewHolder> {
private List<MyPojo> dbList;
private Context context;
MyGridAdapter(Context context, List<MyPojo> dbList) {
this.dbList = new ArrayList<MyPojo>(dbList);
this.context = context;
}
@Override
public MyGridAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Note that the inflate method takes the layout to inflate, the parent to measure
// the layout and the third parameters is false so only this view will handle events like click event
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.categories_item, parent, false);
return new ViewHolder(itemLayoutView);
}
@Override
public void onBindViewHolder(final MyGridAdapter.ViewHolder holder, final int position) {
MyPojo myPojo = dbList.get(position);
holder.title.setText(myPojo.getCat());
//You can register the click listener to the textview (or the whole item if you put it into the holder)
holder.title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailsActivity.class);
Bundle extras = new Bundle();
extras.putInt("catid", dbList.get(position).getCatid());
intent.putExtras(extras);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return dbList.size();
}
//The class is static to avoid leaks from a non-static nested class
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
title = (TextView) itemLayoutView.findViewById(R.id.placeName);
}
}
}
公共类MyGridAdapter扩展了RecyclerView.Adapter{
私人名单;
私人语境;
MyGridAdapter(上下文上下文,列表dbList){
this.dbList=newarraylist(dbList);
this.context=上下文;
}
@凌驾
public MyGridAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
//请注意,充气方法采用要充气的布局和要测量的父级
//布局和第三个参数为false,因此只有此视图将处理诸如click event之类的事件
View itemLayoutView=LayoutFlater.from(parent.getContext())。充气(R.layout.categories_item,parent,false);
返回新的ViewHolder(itemLayoutView);
}
@凌驾
public void onBindViewHolder(最终MyGridAdapter.ViewHolder,最终int位置){
MyPojo MyPojo=dbList.get(位置);
holder.title.setText(myPojo.getCat());
//您可以将click listener注册到textview(或者如果将整个项目放入支架中,则注册整个项目)
holder.title.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(上下文、DetailsActivity.class);
Bundle extras=新Bundle();
putInt(“catid”,dbList.get(position.getCatid());
意图.临时演员(临时演员);
背景。开始触觉(意图);
}
});
}
@凌驾
public int getItemCount(){
返回