我的RecyclerView不调用onCreateViewHolder, onBindViewHolder甚至MenuViewHolder构造函数,因此什么也没有出现在RecyclerView。 我放置了用于调试的日志,但没有显示日志。 有什么问题吗?

我的适配器:

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:

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

和我的碎片:

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;
}

当前回答

我有一个问题,因为我自己设置的布局,并把

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/band_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</androidx.recyclerview.widget.RecyclerView>

and

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/band_recycler_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:textAlignment="center">

解决了我的问题

其他回答

无论如何,我在实际初始化适配器之前设置回收器视图适配器时观察到了这一点。解决方案是确保使用非空适配器调用recyclerView.setAdapter(适配器)

我真的真的希望有一天这能帮助到别人。我花了一个多小时在这上面都快疯了!

我有这个:

projects_recycler_view.apply {
            this.layoutManager = linearLayoutManager
            this.adapter = adapter
        }

当我本该拥有这些的时候:

projects_recycler_view.apply {
            this.layoutManager = linearLayoutManager
            this.adapter = projectAdapter
        }

因为我愚蠢地调用了我的适配器适配器,它被应用块中的回收器视图的适配器遮蔽了!我将适配器重命名为projectAdapter以区分它,问题解决了!

对于那些在Kotlin中遇到这个问题的人,可以使用下面的代码:

recycler.layoutManager = LinearLayoutManager(context)

注意,即使你的recyclerView使用constraintLayout,你也可以使用LinearLayoutManager。

确保XML和Koltin/Java代码匹配。在我的情况下,我有一个问题与ViewHolder,因为我写了:

var txt: AppCompatTextView = itemView.findViewById(R.id.txt)

但由于我的XML代码是:

<TextView
        android:id="@+id/txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        .../>

我必须将前一行更改为:

var txt: TextView = itemView.findViewById(R.id.txt)

此外,我还不得不删除:

recyclerView.setHasFixedSize(true);

我希望这能帮助到你:)

我的错误是在Fragment onCreateView中膨胀了错误的视图。