Android 如何在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

我想使用FirebaseRecyclerAdapter从实时数据库中获取确定的值。这是我的班级:

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中列出与其连接的产品