Java 为什么RecyclerView onBindViewHolder只打了一次电话?
我的代码中有一个奇怪的错误。我使用Recycler视图(过去使用时没有任何问题)。我创建了测试ArrayList以在Recycler中显示它,但我在RecyclerView中得到了唯一的第一行,之后,应用程序停止(而不是崩溃),就像ArrayList完成一样 我的主要代码:Java 为什么RecyclerView onBindViewHolder只打了一次电话?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我的代码中有一个奇怪的错误。我使用Recycler视图(过去使用时没有任何问题)。我创建了测试ArrayList以在Recycler中显示它,但我在RecyclerView中得到了唯一的第一行,之后,应用程序停止(而不是崩溃),就像ArrayList完成一样 我的主要代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_all_tab, container, false);
Activity activity = getActivity();
//TODO: For testing ONLY
ArrayList<Order> orders = new ArrayList<>();
for(int i = 0; i < 10; i++) {
orders.add(new Order(i, i, i));
}
// Initialising Orders Recycler View.
OrderAdapter orderAdapter = new OrderAdapter(activity, orders);
RecyclerView recyclerViewOrders = (RecyclerView) view.findViewById(R.id.recylerViewAllDiners);
recyclerViewOrders.setLayoutManager(new LinearLayoutManager(activity));
recyclerViewOrders.setAdapter(orderAdapter);
return view;
}
你能试试这个吗
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.item_order, parent, false);
return new OrderHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Order order = orders.get(position);
OrderHolder orderHolder = (OrderHolder)holder;
orderHolder.bindOrder(order);
}
首先,菲比·马修,谢谢你帮我做这件事 我找到了修复它的方法 我在格拉德尔的最初路线是
compile 'com.android.support:recyclerview-v7:23.2.0'
在我为回收商做了样品之后,它还是一样的,我试了一个旧版本
compile 'com.android.support:recyclerview-v7:23.1.1'
它工作得很好。所以我想这不是我的bug=)。如果您知道如何报告此错误,欢迎您这样做
更新:
问题是我没有将我的项目的布局高度设置为包裹内容。由于我不了解旧版本的原因,这并不重要,但在新版本中,它只占用了我所有的屏幕,我没有想到尝试将其向下滑动。我也遇到了同样的问题,因为设置了错误的高度参数 它应该是wrap\u content,但我设置了布局高度=match\u parent
因此,第一个列表项将占据列表视图中的所有空间,因此它只显示一个列表项。如果项目布局高度的最外层元素未设置为“匹配父项”值,而是设置为“换行内容”或某个Ndp值,请检查它。例如:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout mlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" // Just like this!
>
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
我以前的提交回收视图支持版本:24.2.1 后来,我通过添加以下内容更新了build.gradle:
> configurations.all {
> resolutionStrategy.eachDependency { DependencyResolveDetails details ->
> def requested = details.requested
> if (requested.group == 'com.android.support') {
> if (!requested.name.startsWith("multidex")) {
> details.useVersion '25.3.0'
> }
> }
> } }
因此,在此之后,除“multidex”外,所有支持版本都已升级到25.3.0。这意味着recyclerview版本也升级了
问题是,在运行构建之后,不会调用My recyclerview onbindviewholder方法
任何我在评论上述代码并运行之后发现这一原因的方式,都可以使用我的recyclerview
希望这对某人有用
问候
VinodonBindViewHolder是@Override,因此我无法更改它的参数。将您的“extends RecyclerView.Adapter”替换为“extends RecyclerView.Adapter”,当OrderHolder从RecyclerView.ViewHolder扩展时,他为什么要替换它?在这种情况下没有必要这样做,我不知道这是否重要,但我正在开发Android Studio 2.0的beta 6版本,这可能是instant run的一个问题。你有没有试过用23.2库干净地安装一个干净的版本?WarrenFaith,不太确定你的意思(你有没有用23.2库干净地安装一个干净的版本?)。我想我会尝试卸载测试版,并在Android Studio的稳定版本上尝试同样的方法。我建议从emulator/device中删除你的应用程序,创建一个“build->clean”,然后再次尝试使用23.2.0库运行并安装它。即时运行功能只是“注入”新代码,似乎仍然存在一些问题,因此我想知道作为注入的代码是否已经有问题(我觉得很愚蠢=)问题在于我没有将项目的布局高度设置为包装内容。由于我不理解旧版本的原因,它并不重要,但在新版本中,它占据了我所有的屏幕,我不想尝试将其滑下。真的很愚蠢的情况,但我很高兴它是在过去。只是花了些时间重新安装studio=)。再次感谢您试图帮助我。这对我帮助很大。我一直在挖掘为什么onBindViewHolder只调用了第一项而不是所有项,即使我添加了日志。最后您的回答帮助了我。谢谢
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout mlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" // Just like this!
>
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
> configurations.all {
> resolutionStrategy.eachDependency { DependencyResolveDetails details ->
> def requested = details.requested
> if (requested.group == 'com.android.support') {
> if (!requested.name.startsWith("multidex")) {
> details.useVersion '25.3.0'
> }
> }
> } }