Recyclerview不叫onCreateViewHolder [英] Recyclerview not call onCreateViewHolder

查看:2508
本文介绍了Recyclerview不叫onCreateViewHolder的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 RecyclerView 不叫 onCreateViewHolder onBindViewHolder 甚至 MenuViewHolder 的构造函数,因此,不会出现在 RecyclerView 东西。
我把日志进行调试,并没有记录显示。
有什么可以?
我的适配器:

 公共类MenuAdapter扩展RecyclerView.Adapter< MenuAdapter.MenuViewHolder> {
私人LayoutInflater吹气;
清单<菜单>数据= Collections.emptyList();公共MenuAdapter(上下文的背景下,列表与LT;菜单>数据){
    Log.i(调试,Construtor);
    充气= LayoutInflater.from(上下文);
    Log.i(DEBUG菜单 - CONSTRUTOR,inflater.toString());
    this.data =数据;
    对于(菜单菜单:this.data){
        Log.i(DEBUG菜单 - CONSTRUTOR,menu.menu);
    }
}@覆盖
公共MenuViewHolder onCreateViewHolder(ViewGroup中的父母,INT viewType){
    查看查看= inflater.inflate(R.layout.row_menu,父母,假);
    MenuViewHolder持有人=新MenuViewHolder(视图);
    回到持有人;
}@覆盖
公共无效onBindViewHolder(MenuViewHolder持有人,INT位置){
    Log.i(DEBUG MENU,onBindViewHolder);
    菜单电流= data.get(位置);
    holder.title.setText(current.menu);
}@覆盖
公众诠释getItemCount(){
    返回0;
}类MenuViewHolder扩展RecyclerView.ViewHolder {
    TextView的称号;
    ImageView的图标;    公共MenuViewHolder(查看ItemView控件){
        超(ItemView控件);
        标题=(TextView中)itemView.findViewById(R.id.menuText);
    }
}

我的自定义行XML:

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:方向=横向的android:layout_width =match_parent
机器人:layout_height =match_parent><的TextView
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:ID =@ + ID / menuText
    机器人:文字=虚拟文本
    机器人:layout_gravity =center_vertical
    机器人:文字颜色=#222/>

和我的片段:

 公共NavigationFragment(){
    //必需的空公共构造
}@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    mUserLearnedDrawer =通过Boolean.valueOf(readFrom preferences(getActivity(),KEY_USER_LEARNED_DRAWER,假));
    如果(savedInstanceState!= NULL){
        mFromSavedInstaceState = TRUE;
    }
}@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                         捆绑savedInstanceState){
    //充气的布局该片段    查看查看= inflater.inflate(R.layout.fragment_navigation,集装箱,FALSE);
    RecyclerView recyclerView =(RecyclerView)view.findViewById(R.id.drawer_list);
    MenuAdapter适配器=新MenuAdapter(getActivity(),的getData());
    recyclerView.setAdapter(适配器);
    recyclerView.setLayoutManager(新LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(适配器);
    返回视图。
}


解决方案

您getItemCount方法返回0所以RecyclerView从不试图创建一个视图。让它返回的东西大于0。

my RecyclerView do not call onCreateViewHolder, onBindViewHolder even MenuViewHolder constructor, therefore, does not appear anything in RecyclerView. I put logs for debugging, and no log is shown. What can be? My adapter:

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", "Construtor");
    inflater = LayoutInflater.from(context);
    Log.i("DEBUG MENU - CONSTRUTOR", inflater.toString());
    this.data = data;
    for(Menu menu: this.data){
        Log.i("DEBUG MENU - CONSTRUTOR", 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);
    }
}

My custom row XML:

<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"/>

and my Fragment:

 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.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);
    return view;
}

解决方案

Your getItemCount method returns 0. So RecyclerView never tries to instantiate a view. Make it return something greater than 0.

这篇关于Recyclerview不叫onCreateViewHolder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆