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
相关产品推荐
相关产品推荐

