gpt4 book ai didi

java - RecyclerView 不调用 getItemCount

转载 作者:行者123 更新时间:2023-11-30 10:25:42 25 4
gpt4 key购买 nike

我调查了关于这个问题的几个 SO 答案(herehereand here),但没有一个提议的解决方案有效。我的问题是没有显示我的 RecyclerView 列表项。我在 MessengerRecyclerAdapter、onCreateViewHolder、onBindViewHolder 和 getItemCount 中设置了断点,并且只调用了第一个断点。在断点处,我进入了表达式计算器并执行了

MessengerRecyclerAdapter.getItemCount();

并收到了预期的答案 20。RecyclerView 本身占据了预期的内容区域,如下面的屏幕截图所示(我将 RecyclerView 变为洋红色以突出显示它占据的空间)。

RecyclerView location

我的 RecyclerView XML 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.v7.widget.RecyclerView
android:id="@+id/thread_list"
android:background="@color/colorAccent"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:name="com.jypsee.jypseeconnect.orgPicker.MessengerListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="LinearLayoutManager"
tools:context="com.jypsee.jypseeconnect.orgPicker.MessengerListFragment"
tools:listitem="@layout/fragment_messenger_cell"/>

</LinearLayout>

我的 RecyclerView 单元格 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:id="@+id/id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem"
android:textColor="@color/blueText"/>

<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem"
android:textColor="@color/darkText"/>
</LinearLayout>

我的 ListFragment 类:

    @Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {

List<DummyContent.DummyItem> items = new ArrayList<>();
for (Integer i = 0; i<20; i++){
DummyContent.DummyItem item = new DummyContent.DummyItem(i.toString(),"Content","Details");
items.add(item);
}

View view = inflater.inflate(R.layout.fragment_messenger_list, container, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.thread_list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerAdapter = new MessengerThreadRecyclerAdapter(items, mListener);
mRecyclerView.setAdapter(mRecyclerAdapter);
mRecyclerAdapter.notifyDataSetChanged();
return view;
}

我的适配器类:

public class MessengerRecyclerAdapter
extends RecyclerView.Adapter<MessengerRecyclerAdapter.MessageThreadHolder>{

private final List<DummyItem> mValues;
private final RecyclerViewClickListener mListener;

public MessengerRecyclerAdapter(List<DummyItem> items, RecyclerViewClickListener listener) {
mValues = items;
mListener = listener;
}

@Override
public MessageThreadHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_messenger_cell, parent, false);
return new MessageThreadHolder(view);
}

@Override
public void onBindViewHolder(final MessageThreadHolder holder, final int position) {
holder.mItem = mValues.get(position);
holder.mIdView.setText(mValues.get(position).id);
holder.mContentView.setText(mValues.get(position).content);
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.recyclerViewListClicked(v, position);
}
}
});
}

@Override
public int getItemCount() {
return mValues.size();
}

public class MessageThreadHolder extends RecyclerView.ViewHolder {
public final View mView;
public final TextView mIdView;
public final TextView mContentView;
public DummyItem mItem;

public MessageThreadHolder(View view) {
super(view);
mView = view;
mIdView = (TextView) view.findViewById(R.id.id);
mContentView = (TextView) view.findViewById(R.id.content);
}
}

如您所见,我已将 linearLayout 方向设置为垂直并设置布局管理器,这是两种最常见的解决方案。我真的不知道接下来要尝试什么,所以非常感谢您的帮助。

最佳答案

正如我在之前的答案编辑中所说的。问题出在您的 xml 中。它未显示的主要原因是,您尝试使用包含标记而不是 fragment 标记添加 fragment ,因此从未在添加到您的 Activity 的 fragment 布局上调用相应的 fragment 类。以下是正确添加 fragment 所需的代码。

<fragment
android:id="@+id/message_thread"
android:name="com.jypsee.jypseeconnect.orgPicker.MessengerThreadListFragment"
layout="@layout/fragment_messengerthread_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_messengerthread_list" />

你的 fragment 布局应该是这样的

<?xml version="1.0" encoding="utf-8"?>
<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=".orgPicker.MessengerThreadListFragment">
<android.support.v7.widget.RecyclerView
android:id="@+id/thread_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>

这是运行 enter image description here 的截图

关于java - RecyclerView 不调用 getItemCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46030137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com