android - 根据 Firebase 中的优先级对数据进行排序并将其显示在 FirebaseRecyclerAdapter 中
问题描述
我有来自实时数据库的数据,并且它现在被绑定到一个FirebaseRecyclerAdapter
,当数据插入实时数据库时,数据是按照它的排序方式获取的,但是在我按类别对它进行排序或搜索之后,顺序是变得分散。
我添加了一个名为 priority 的字段,我想在其中分配要显示的第一个项目,依此类推。我该怎么做,我需要控制用户查看项目的顺序。
这是实时数据库及其所有字段的图像。我希望它由孩子订购 - 优先。
我还添加了下面的代码,我用来绑定到FirebaseRecyclerAdapter
package com.test.testbv;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
RecyclerView mRecyclerView;
FirebaseDatabase mFirebaseDatabase;
DatabaseReference mRef;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FirebaseAuth.getInstance().getCurrentUser();
if (FirebaseAuth.getInstance().getCurrentUser() != null) {
// User is signed in.
} else {
// No user is signed in.
redirectToLogin();
}
// Action Bar
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Coupons List");
mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
// Set Layout
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
// Send Query to Firebase Db
mFirebaseDatabase = FirebaseDatabase.getInstance();
mRef = mFirebaseDatabase.getReference("Data");
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Model, ViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<Model, ViewHolder>(
Model.class,
R.layout.row,
ViewHolder.class,
mRef
) {
@Override
protected void populateViewHolder(ViewHolder viewHolder, Model model, int position) {
viewHolder.setDetails(getApplicationContext(), model.getTitle(), model.getDescription(), model.getImage());
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);
viewHolder.setOnClickListener(new ViewHolder.clickListener() {
@Override
public void onItemClick(View view, int position) {
// get Data from firebase at the position clicked
String mTitle = getItem(position).getTitle();
String mDesc = getItem(position).getDescription();
String mImage = getItem(position).getImage();
// Pass this data to new activity
Intent intent = new Intent(view.getContext(), PostDetailActivity.class);
intent.putExtra("image", mImage);
intent.putExtra("title", mTitle);
intent.putExtra("description", mDesc);
startActivity(intent);
}
@Override
public void onItemLongClick(View view, int position) {
}
});
return viewHolder;
}
};
// Set adapter to recycler view
mRecyclerView.setAdapter(firebaseRecyclerAdapter);
}
}
解决方案
要解决这个问题,您应该使用如下所示的查询:
mFirebaseDatabase = FirebaseDatabase.getInstance();
mRef = mFirebaseDatabase.getReference("Data");
Query mQuery = mRef.orderByChild("prority");
如果您想查询特定的优先级,比如说优先级1
,请使用以下查询:
Query mQuery = mRef.orderByChild("prority").equalsTo(1);
推荐阅读
- c++ - 告诉目标文件中哪些符号是可链接的?
- svelte - 如何在 Svelte 中绑定存储变量?
- r - 如何将 tidy 模型 PCA 纳入模型的工作流程并进行预测
- python - 找到斐波那契的第 n 项我不断收到错误
- rust - 为什么是'futures::prelude::*; 未清除
- android - 如何使用 SharedPreferences 信息注册活动来登录活动?
- c# - 使用数据注释进行验证不起作用
- ffmpeg - 如何将所有音轨转换为 eac3 并保留所有字幕?
- nginx - nginx如何proxy_pass所有请求期望一个目录?
- python - 在python中设置可变数量的输入节点