You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Firestore绑定RecyclerView遇FAILED BINDER TRANSACTION错误求助

解决Firestore RecyclerView绑定的FAILED BINDER TRANSACTION和StackOverflowError问题

看起来你遇到的问题是几个小细节失误叠加导致的:上下文使用不当、Firestore适配器生命周期未正确管理,再加上布局绘制时的循环触发。我们一步步来修复:

1. 替换LayoutManager的上下文

在Fragment中用getApplicationContext()初始化LinearLayoutManager是不合适的,应用上下文没有关联当前Activity的视图层级,容易引发视图绘制的异常循环。换成requireContext()(推荐,确保Fragment已附加到Activity)或者getContext()即可:

recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));

2. 正确管理FirestoreRecyclerAdapter的生命周期

FirestoreRecyclerAdapter需要手动启动/停止数据监听,否则会导致数据持续加载、内存泄漏,甚至引发超大Parcel传递(也就是你看到的parcel size = 19834640)。在Fragment中添加以下生命周期方法:

@Override
public void onStart() {
    super.onStart();
    if (adapter != null) {
        adapter.startListening();
    }
}

@Override
public void onStop() {
    super.onStop();
    if (adapter != null) {
        adapter.stopListening();
    }
}

注意:要把adapter变量提升为Fragment的成员变量,这样生命周期方法才能访问到它:

// 在FriendsFragment类顶部声明成员变量
private FirestoreRecyclerAdapter<FriendModel, FriendHolder> adapter;

3. 排查布局文件single_friend_row_test.xml

报错日志里的StackOverflowError是在Drawable重绘循环中触发的(RippleDrawable反复调用invalidate),大概率是布局控件的样式/背景设置有问题:

  • 检查TextView的背景是否用了会无限触发重绘的drawable(比如配置错误的自定义RippleDrawable)
  • 简化布局层级,避免不必要的嵌套,减少绘制压力
  • 可以先替换成极简布局测试:
<?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="wrap_content"
    android:padding="16dp">

    <TextView
        android:id="@+id/id_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp"/>

</LinearLayout>

修改后的完整FriendsFragment代码

public class FriendsFragment extends Fragment{ 
    private static final String TAG = "FriendsFragment"; 
    private FirestoreRecyclerAdapter<FriendModel, FriendHolder> adapter; // 成员变量
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    CollectionReference friends = FirebaseFirestore.getInstance().collection("Users").document(user.getUid()).collection("friends"); 
    RecyclerView recyclerView; 

    public FriendsFragment() { } 

    @Nullable 
    @Override 
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
        // 注意这里要传第三个参数false,避免重复添加父布局
        View view = inflater.inflate(R.layout.fragment_friends, container, false); 
        Log.d(TAG, "onCreateView: "+ friends); 
        final Query query = friends.limit(2); 
        recyclerView = view.findViewById(R.id.id_recycleViewFriends); 
        recyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); 

        FirestoreRecyclerOptions<FriendModel> options = new FirestoreRecyclerOptions.Builder<FriendModel>()
                .setQuery(query,FriendModel.class)
                .setLifecycleOwner(this)
                .build(); 

        adapter = new FirestoreRecyclerAdapter<FriendModel, FriendHolder>(options) { 
            @Override 
            protected void onBindViewHolder(FriendHolder holder, int position, FriendModel model) { 
                holder.setName(model.getName()); 
            } 

            @Override 
            public FriendHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
                return new FriendHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.single_friend_row_test, parent, false)); 
            } 
        }; 

        recyclerView.setAdapter(adapter); 
        return view; 
    } 

    @Override
    public void onStart() {
        super.onStart();
        if (adapter != null) {
            adapter.startListening();
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if (adapter != null) {
            adapter.stopListening();
        }
    }
}

这些修改应该能解决你遇到的绑定错误和栈溢出问题,核心是修复上下文适配、管理适配器生命周期,以及排除布局绘制的循环异常。

内容的提问来源于stack exchange,提问作者ashaneen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:49:51