首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >回收器视图不调用onCreateViewHolder

回收器视图不调用onCreateViewHolder
EN

Stack Overflow用户
提问于 2015-01-07 08:18:02
回答 29查看 102.1K关注 0票数 182

我的RecyclerView不调用onCreateViewHolderonBindViewHolder甚至MenuViewHolder构造函数,因此RecyclerView中没有任何内容。我将日志放入调试,但没有显示日志。可能的问题是什么?

我的适配器:

代码语言:javascript
复制
public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> {
private LayoutInflater inflater;
List<Menu> data = Collections.emptyList();

public MenuAdapter(Context context, List<Menu> data) {
    Log.i("DEBUG", "Constructor");
    inflater = LayoutInflater.from(context);
    Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString());
    this.data = data;
    for(Menu menu: this.data){
        Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu);
    }
}

@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.row_menu, parent, false);
    MenuViewHolder holder = new MenuViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MenuViewHolder holder, int position) {
    Log.i("DEBUG MENU", "onBindViewHolder");
    Menu current = data.get(position);
    holder.title.setText(current.menu);
}

@Override
public int getItemCount() {
    return 0;
}

class MenuViewHolder extends RecyclerView.ViewHolder {
    TextView title;
    ImageView icon;

    public MenuViewHolder(View itemView) {
        super(itemView);
        title = (TextView) itemView.findViewById(R.id.menuText);
    }
}

我的自定义行XML:

代码语言:javascript
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/menuText"
    android:text="Dummy Text"
    android:layout_gravity="center_vertical"
    android:textColor="#222"/>

和我的片段:

代码语言:javascript
复制
public NavigationFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"));
    if (savedInstanceState != null) {
        mFromSavedInstaceState = true;
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View view = inflater.inflate(R.layout.fragment_navigation, container, false);
    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.drawer_list);
    MenuAdapter adapter = new MenuAdapter(getActivity(), getData());
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);
    return view;
}
EN

回答 29

Stack Overflow用户

回答已采纳

发布于 2015-01-07 08:24:38

您的getItemCount方法returns 0。因此,RecyclerView永远不会尝试实例化视图。让它返回一些greater than 0

例如

代码语言:javascript
复制
@Override
public int getItemCount() {
    return data.size();
}
票数 278
EN

Stack Overflow用户

发布于 2015-09-29 18:55:21

另一个是确保将布局管理器设置为RecyclerView:

代码语言:javascript
复制
recycler.setLayoutManager(new LinearLayoutManager(this));
票数 480
EN

Stack Overflow用户

发布于 2018-01-27 04:17:46

我忘了添加下面这行后,我添加了它为我工作

代码语言:javascript
复制
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27809524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档