我的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;
}
答案 0 :(得分:349)
另一个是确保将布局管理器设置为RecyclerView:
recycler.setLayoutManager(new LinearLayoutManager(this));
答案 1 :(得分:192)
您的getItemCount
方法returns 0
。因此RecyclerView
永远不会尝试实例化视图。让它返回greater than 0
。
例如
@Override
public int getItemCount() {
return data.size();
}
答案 2 :(得分:36)
我添加它为我工作后忘记添加以下行
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
答案 3 :(得分:9)
这不适用于您的特定情况。但这可能有助于其他人。
这个原因可能是不小心使用以下方法
recyclerView.setHasFixedSize(true);
如果不谨慎使用,可能会导致onBindView
和onCreateViewHolder
根本不被调用,日志中没有错误。
答案 4 :(得分:8)
对于它的价值,我在实际初始化适配器之前设置了Recycler视图适配器时观察到了它。解决方案是确保使用非null适配器调用recyclerView.setAdapter(adapter)
答案 5 :(得分:5)
在 0_start
2_start
1_start
4_start
3_start
或TextView
中设置custom.xml
的高度。如果高度为RecyclerView
,则wrap-content
将不可见。
答案 6 :(得分:4)
当RecyclerView
位于ScrollView
内且我使用的是Android支持库23.0时,就会发生这种情况。要修复,我更新到Android支持库23.2:
在build.gradle中:
dependencies {
...
compile 'com.android.support:appcompat-v7:23.2.+'
compile 'com.android.support:cardview-v7:23.2.+'
}
答案 7 :(得分:4)
请将布局管理器设置为RecyclerView
,如下面的代码:
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view_right);
//set your recycler view adapter here
NavigationAdapter adapter = new NavigationAdapter(this, FragmentDrawer.getData());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
答案 8 :(得分:4)
将此添加到您的适配器类
@Override
public int getItemCount() {
return mDataset.size();
}
答案 9 :(得分:3)
我遇到了同样的问题,因为我在布局资源中使用了android.support.constraint.ConstraintLayout
。
更改为FrameLayout
有帮助。
答案 10 :(得分:3)
也许对某人有帮助,但是如果您将RecycleView的可见性设置为GONE,则根本不会调用适配器方法...花了我一些时间来解决它。
答案 11 :(得分:2)
如果您使用的是Android数据绑定库,请查看我的答案 - 确保您为recyclerview设置布局,并且项目计数必须大于0
@BindingAdapter({"entries", "layout"})
public static void setEntries(RecyclerView view, ArrayList<LoginResponse.User> listOfUsers, int layoutId) {
if (view.getAdapter() == null) {
view.setLayoutManager(new LinearLayoutManager(view.getContext()));
SingleLayoutAdapter adapter = new SingleLayoutAdapter(layoutId) {
@Override
protected Object getObjForPosition(int position) {
return listOfUsers.get(position);
}
@Override
public int getItemCount() {
return listOfUsers.size();
}
};
view.setAdapter(adapter);
}
}
快乐编码: - )
答案 12 :(得分:2)
我在这个问题上挣扎了好几个小时。我正在使用片段。而问题并没有归还[ moment("2017-10-20T07:00:00.000"),
moment("2017-10-20T07:30:00.000"),
moment("2017-10-20T08:00:00.000"),
moment("2017-10-20T08:30:00.000"),
moment("2017-10-20T09:00:00.000"),
moment("2017-10-20T09:30:00.000"),
...
moment("2017-10-20T19:30:00.000"),
moment("2017-10-20T20:00:00.000"),
moment("2017-10-20T20:30:00.000"),
moment("2017-10-20T21:00:00.000"),
moment("2017-10-20T21:30:00.000"),
moment("2017-10-20T22:00:00.000") ]
。以下是我的代码:
view
答案 13 :(得分:2)
其他选项是如果您使用get发送此列表objetc,请验证您是否有正确的引用,例如
private list<objetc> listObjetc;
//Incorrect
public void setListObjetcs(list<objetc> listObjetc){
listObjetc = listObjetc;
}
//Correct
public void setListObjetcs(list<objetc> listObjetc){
this.listObjetc = listObjetc;
}
答案 14 :(得分:1)
如果您将wrap_content作为列表的高度以及项目列表的高度,则不会显示任何内容,也不会调用您的recyclerView函数。修复项目的高度或将match_parent放入列表高度。这解决了我的问题。
答案 15 :(得分:1)
转到您的xml。并更改布局以包装内容。一个元素隐藏了下一个元素,因此方法不起作用!
答案 16 :(得分:1)
我的encouter是未被调用的RecyclerView.adaptor的onBindViewHolder(holder,position)覆盖方法。方法onCreateViewHolder被调用,getItemCount被调用。如果您阅读了Recyclerview适配器的规格,您将了解到如果您已覆盖onBindViewHolder(持有者,位置,列表有效负载)将被调用。所以请小心。
答案 17 :(得分:1)
就我而言,我的列表大小为0,并且没有调用onCreateViewHolder 方法。我需要在空心列表的中心显示一条消息作为占位符,所以我这样做就像魅力一样。回答@Konstantin Burov的帮助。
@Override
public int getItemCount() {
if (contactList.size() == 0) {
return 1;
} else {
return contactList.size();
}
}
答案 18 :(得分:1)
如果使用自定义适配器,请不要忘记将ItemCount设置为集合的大小。
答案 19 :(得分:0)
请做以下事情
@Override
public int getItemCount() {
return data.size();
}
答案 20 :(得分:0)
在我将Activity更改为使用ViewModel和DataBinding的情况下,我忘记从setContentView
方法中删除onCreate
方法调用。通过删除它,我的问题得以解决。
答案 21 :(得分:0)
我的错误是在Fragment onCreateView中夸大了错误的视图。
答案 22 :(得分:0)
对我来说,是因为 setHasStableIds(true); 方法已设置。 删除它,它将起作用
答案 23 :(得分:0)
我真的真的希望这一天能对某人有所帮助。我只是花了一个多小时来疯了!
我有这个:
projects_recycler_view.apply {
this.layoutManager = linearLayoutManager
this.adapter = adapter
}
当我应该有这个时:
projects_recycler_view.apply {
this.layoutManager = linearLayoutManager
this.adapter = projectAdapter
}
因为我愚蠢地称我的适配器adapter
,所以它被Apply块中的回收者视图的适配器遮盖了!我将适配器重命名为projectAdapter,以区分它并解决问题!
答案 24 :(得分:0)
recyclerView.setAdapter(adapter);叫 通过调用方法填充recyclerView列表。
答案 25 :(得分:0)
确保您的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);
我希望这可以为您提供帮助:)
答案 26 :(得分:0)
在我的情况下,我在适配器中设置列表后缺少调用notifyDataSetChanged()
。
public void setUserList(List<UserList> userList) {
this.userList = userList;
notifyDataSetChanged();
}
答案 27 :(得分:0)
就我而言,我想在LinearLayout中设置方向。
添加方向问题后已修复。
android:orientation="vertical"
答案 28 :(得分:0)
我的问题是RecyclerView的layout_height
和layout_width
设置为0dp
。
答案 29 :(得分:0)
我遇到了一个问题,因为我自己设置了布局并放了
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/band_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.recyclerview.widget.RecyclerView>
和
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/band_recycler_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:textAlignment="center">
解决了我的问题
答案 30 :(得分:0)
你忘记了 xml 中的这一行 app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
或
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"