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

FirebaseRecyclerOptions无法解析getCurrentList方法求助

问题:无法解析FirebaseRecyclerOptions中的getCurrentList方法

错误信息

Cannot resolve method 'getCurrentList' in 'FirebaseRecyclerOptions':101

相关代码

public class searchEngineActivity extends AppCompatActivity {
    public String stateSelected;
    public String courseSelected;
    public RecyclerView searchRecyclerView;
    public WebView webView;
    public FirebaseRecyclerOptions adapter;
    public DatabaseReference databaseReference;
    String queryState, queryCourse;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_engine);

        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));
        Bundle bundle = getIntent().getExtras();
        stateSelected = bundle.getString("stateSelected");
        courseSelected = bundle.getString("courseSelected");
        Log.e("arguments",stateSelected+courseSelected );
        makeQuery(stateSelected, courseSelected);
        searchRecyclerView = (RecyclerView) findViewById(R.id.searchRecyclerView);
        webView = (WebView) findViewById(R.id.webView);
        searchRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
        setAdapter();
        searchRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL));
    }

    public void makeQuery(String q, String c) {
        queryState = q.replaceAll(" ", "-");
        queryState = queryState.toLowerCase();
        queryCourse = c.toLowerCase();

    }

    public void setAdapter() {
        Query query = FirebaseDatabase.getInstance().getReference().child("searchengines");
        FirebaseRecyclerOptions<searchModelClass> options = new FirebaseRecyclerOptions.Builder<searchModelClass>().setQuery(query, searchModelClass.class).build();
        adapter = new FirebaseRecyclerPagingAdapter<searchModelClass, androidx.recyclerview.widget.RecyclerView.ViewHolder>(options) {

            //@Override
            protected void onBindViewHolder(@NonNull searchRecyclerViewHolder holder, final int position, @NonNull searchModelClass model) {
                holder.setSiteImage(model.getImage());
                holder.setSiteName(model.getName());
                holder.setSiteURL(model.getUrl());
            }

            @Override
            protected void onBindViewHolder(@androidx.annotation.NonNull @NonNull RecyclerView.ViewHolder viewHolder, int position, @androidx.annotation.NonNull @NonNull searchModelClass model) {
            }

            @Override
            protected void onLoadingStateChanged(@androidx.annotation.NonNull @NonNull LoadingState state) {
            }

            @NonNull
            //@Override
            public searchRecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.search_recycler_view, parent, false);

                final searchRecyclerViewHolder viewHolder = new searchRecyclerViewHolder(view);
                viewHolder.setOnClickListener(new searchRecyclerViewHolder.ClickListener() {
                    @Override
                    public void onClick(View view, int position) {
                        databaseReference = adapter.getCurrentList(position);
                        databaseReference = databaseReference.child(queryCourse);
                        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                String queryURL = dataSnapshot.getValue(String.class);
                                queryURL = queryURL.replaceAll("state", queryState);
                                webView.loadUrl(queryURL);

                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                            }
                        });
                    }
                });
                return viewHolder;
            }
        };
        searchRecyclerView.setAdapter(adapter);
    }

    @Override
    public void onStart() {
        super.onStart();
        FirebaseRecyclerPagingAdapter<Object, RecyclerView.ViewHolder> firebaseRecyclerAdapter = null;
        firebaseRecyclerAdapter.startListening();
    } //UPDATING RECYCLER VIEW REGULARLY FROM THE START OF FRAGMENT
}

开发者正在开发一款院校搜索App,遇到上述错误。尝试更换RecyclerView库但需要重写全部代码,寻求其他解决办法。


解决方案

1. 修正变量类型错误

核心问题是adapter的类型声明错误:你把它声明为FirebaseRecyclerOptions,但实际它是FirebaseRecyclerPagingAdapter实例。修改声明:

// 替换原有错误声明
public FirebaseRecyclerPagingAdapter<searchModelClass, searchRecyclerViewHolder> adapter;

2. 替换错误的数据获取方法

FirebaseRecyclerPagingAdapter没有getCurrentList(position)方法,直接用getItem(position)获取对应位置的模型实例,再从模型中获取所需数据:

@Override
public void onClick(View view, int position) {
    // 获取当前位置的模型数据
    searchModelClass model = adapter.getItem(position);
    // 根据模型中的字段拼接数据库引用(示例需根据实际数据结构调整)
    databaseReference = FirebaseDatabase.getInstance().getReference()
            .child("searchengines")
            .child(model.getNodeKey()) // 假设模型中有存储节点键的字段
            .child(queryCourse);
    // 后续ValueEventListener逻辑保持不变
}

3. 修复onStart方法的无效代码

当前onStart中创建了空的适配器实例,无法正常启动监听,直接使用已初始化的adapter:

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

4. 清理冗余代码

删除重复的空实现onBindViewHolder方法,保留有效实现即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:42:21