Android 如何在FirebaseRecyclerAdapter中获取选择值?
我想使用FirebaseRecyclerAdapter从实时数据库中获取确定的值。这是我的班级:Android 如何在FirebaseRecyclerAdapter中获取选择值?,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我想使用FirebaseRecyclerAdapter从实时数据库中获取确定的值。这是我的班级: public class ProductAvtivity extends AppCompatActivity { private final String TAG = "ProductActivity"; private RecyclerView mRecyclerView; private RecyclerView.LayoutManager mLayoutManag
public class ProductAvtivity extends AppCompatActivity {
private final String TAG = "ProductActivity";
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private FirebaseDatabase database;
private DatabaseReference mProductReference;
private Query mMachineReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_avtivity);
database = FirebaseDatabase.getInstance();
mProductReference = database.getReference().child("products");
String idmachine = getIntent().getStringExtra("idmachine");
mMachineReference = database.getReference().child("machines").child("_id").equalTo(idmachine);
Log.d(TAG + "idmachine",idmachine);
mRecyclerView = (RecyclerView) findViewById(R.id.product_recyclerview);
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
FirebaseRecyclerAdapter<Product,ProductViewHolder> adapter =
new FirebaseRecyclerAdapter<Product, ProductViewHolder>(Product.class,R.layout.view_product,ProductViewHolder.class,mProductReference) {
@Override
protected void populateViewHolder(ProductViewHolder viewHolder, Product model, int position) {
viewHolder.productName.setText(model.name);
}
};
mRecyclerView.setAdapter(adapter);
}
public static class ProductViewHolder extends RecyclerView.ViewHolder{
TextView productName;
public ProductViewHolder(View itemView) {
super(itemView);
productName = (TextView) itemView.findViewById(R.id.product_name);
}
}
}
公共类ProductavActivity扩展了AppCompatActivity{
私有最终字符串TAG=“ProductActivity”;
私人回收视图mRecyclerView;
private RecyclerView.LayoutManager MLLayoutManager;
私有FirebaseDatabase数据库;
私有数据库引用;
私钥查询;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u product\u Avivity);
database=FirebaseDatabase.getInstance();
MPProductReference=database.getReference().child(“产品”);
字符串idmachine=getIntent().getStringExtra(“idmachine”);
mMachineReference=database.getReference().child(“机器”).child(“_id”).equalTo(idmachine);
Log.d(标签+“idmachine”,idmachine);
mRecyclerView=(RecyclerView)findViewById(R.id.product\u RecyclerView);
//如果您知道这些更改,请使用此设置提高性能
//在内容中,不要更改RecyclerView的布局大小
mRecyclerView.setHasFixedSize(true);
//使用线性布局管理器
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setLayoutManager(mllayoutmanager);
FirebaseRecyclerAdapter适配器=
新的FirebaseRecyclerAdapter(Product.class,R.layout.view\u Product,ProductViewHolder.class,MPProductReference){
@凌驾
受保护的void populateViewHolder(ProductViewHolder、产品型号、内部位置){
viewHolder.productName.setText(model.name);
}
};
mRecyclerView.setAdapter(适配器);
}
公共静态类ProductViewHolder扩展了RecyclerView.ViewHolder{
TextView产品名称;
公共产品视图持有者(视图项视图){
超级(项目视图);
productName=(TextView)itemView.findViewById(R.id.product\u名称);
}
}
}
我尝试使用此解决方案,但它不起作用,因为活动崩溃:
公共类ProductavActivity扩展了AppCompatActivity{
private final String TAG = "ProductActivity";
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private FirebaseDatabase database;
private DatabaseReference mProductReference;
private Query mMachineReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_avtivity);
database = FirebaseDatabase.getInstance();
mProductReference = database.getReference().child("products");
String idmachine = getIntent().getStringExtra("idmachine");
mMachineReference = database.getReference().child("machines").child("_id").equalTo(idmachine);
Log.d(TAG + "idmachine",idmachine);
mRecyclerView = (RecyclerView) findViewById(R.id.product_recyclerview);
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
FirebaseRecyclerAdapter<Product,ProductViewHolder> adapter =
new FirebaseRecyclerAdapter<Product, ProductViewHolder>(Product.class,R.layout.view_product,ProductViewHolder.class,mProductReference) {
@Override
protected void populateViewHolder(final ProductViewHolder viewHolder, final Product model, int position) {
mMachineReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Machine machine = dataSnapshot.getValue(Machine.class);
for (Integer i : machine.id_prod){
if (model._id == i){
viewHolder.productName.setText(model.name);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
};
mRecyclerView.setAdapter(adapter);
}
public static class ProductViewHolder extends RecyclerView.ViewHolder{
TextView productName;
public ProductViewHolder(View itemView) {
super(itemView);
productName = (TextView) itemView.findViewById(R.id.product_name);
}
}
}
private final String TAG=“ProductActivity”;
私人回收视图mRecyclerView;
private RecyclerView.LayoutManager MLLayoutManager;
私有FirebaseDatabase数据库;
私有数据库引用;
私钥查询;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u product\u Avivity);
database=FirebaseDatabase.getInstance();
MPProductReference=database.getReference().child(“产品”);
字符串idmachine=getIntent().getStringExtra(“idmachine”);
mMachineReference=database.getReference().child(“机器”).child(“_id”).equalTo(idmachine);
Log.d(标签+“idmachine”,idmachine);
mRecyclerView=(RecyclerView)findViewById(R.id.product\u RecyclerView);
//如果您知道这些更改,请使用此设置提高性能
//在内容中,不要更改RecyclerView的布局大小
mRecyclerView.setHasFixedSize(true);
//使用线性布局管理器
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setLayoutManager(mllayoutmanager);
FirebaseRecyclerAdapter适配器=
新的FirebaseRecyclerAdapter(Product.class,R.layout.view\u Product,ProductViewHolder.class,MPProductReference){
@凌驾
受保护的void populateViewHolder(最终产品viewHolder viewHolder,最终产品型号,内部位置){
mMachineReference.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
Machine Machine=dataSnapshot.getValue(Machine.class);
for(整数i:machine.id\u prod){
如果(型号.\u id==i){
viewHolder.productName.setText(model.name);
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
};
mRecyclerView.setAdapter(适配器);
}
公共静态类ProductViewHolder扩展了RecyclerView.ViewHolder{
TextView产品名称;
公共产品视图持有者(视图项视图){
超级(项目视图);
productName=(TextView)itemView.findViewById(R.id.product\u名称);
}
}
}
我有一个所有机器ID的产品列表,然后我从用户选择机器的另一个活动传递这个列表。通过此选择,我必须在recyclerview中列出与其连接的产品