我可以从我的Firebase服务器获取post_row布局中的图像和标题,文本。
我想点击Recyclerview中的每个项目,然后在google上搜索它们。但我找不到在FirebaseRecyclerView中实现点击事件的合适代码。
这是我的FirebaseRecycler适配器代码!
谢谢你~~ !! mDatabase = FirebaseDatabase.getInstance().getReference().child("post");
@Override
protected void onStart() {
super.onStart();
final Query DBquery = FirebaseDatabase.getInstance().getReference().child("post").orderByChild("count");
FirebaseRecyclerAdapter<Post, PostViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(
Post.class,
R.layout.post_row,
PostViewHolder.class,
DBquery
mDatabase
) {
@Override
protected void populateViewHolder(PostViewHolder viewHolder, Post model, int position) {
viewHolder.setTitle(model.getTitle());
viewHolder.setDesc(model.getDesc());
viewHolder.setImage(getApplicationContext(), model.getImage());
viewHolder.setDate(model.getDate());
}
};
mPostList.setAdapter(firebaseRecyclerAdapter);
}
public static class PostViewHolder extends RecyclerView.ViewHolder {
View mView;
public PostViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setTitle(String title){
TextView post_title = mView.findViewById(R.id.post_title);
post_title.setText(title);
}
public void setDesc(String desc){
TextView post_desc = mView.findViewById(R.id.post_desc);
post_desc.setText(desc);
}
public void setImage(Context ctx, String image){
ImageView post_image = mView.findViewById(R.id.post_image);
Picasso.get().load(image).into(post_image);
}
public void setDate(String date){
TextView post_date = mView.findViewById(R.id.post_date);
post_date.setText(date);
}
}
`
答案 0 :(得分:0)
要解决此问题,请在PostViewHolder
课程中为您的视图添加点击监听器,如下所示:
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Do what you need to do
}
});
如果要在每个视图上添加一个单击侦听器,只需找到mView
对象内的视图,并在每个视图上附加侦听器。就是这样!
答案 1 :(得分:0)
使用列表视图显示您的数据,我这样使用它并且它的工作非常好。
在populateViewHolder
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
mDatabase = mAdapter.getRef(position);
Intent intent = new Intent(MainActivity.this, UserEdit.class);
intent.putExtra("uid",mDatabase.getKey());
intent.putExtra("name", mAdapter.getItem(position).getNombre());
intent.putExtra("Email", mAdapter.getItem(position).getEmail());
intent.putExtra("paid", mAdapter.getItem(position).getPago());
intent.putExtra("connection", mAdapter.getItem(position).getUConexion());
intent.putExtra("connection2", mAdapter.getItem(position).getPConexion());
startActivity(intent);
}
});
mListView.setAdapter(mAdapter);
这只是我的代码中的一个示例,它只需单击列表,获取项目并将其传递给另一个活动以处理该数据。
使用此功能,您可以将适配器数据设置为列表视图,然后单击每个项目可以获得该位置的数据,如果需要,您可以在另一个活动中管理该数据。
我在putExtras中使用的getter正由POJO类传递给FirebaseList。
FirebaseListOptions<Usuarios> options = new FirebaseListOptions.Builder<Usuarios>()
.setQuery(query, Usuarios.class)
.setLayout(R.layout.item_row)
.build();
这里的Usuarios就是这样:
private String Nombre;
private String Dispositivo;
private String sexo;
private String lenguaje;
private String email;
public Usuarios(){}
public Usuarios(String nombre, String dispositivo, String sexo, String lenguaje, String email, String PConexion, String UConexion, String URL_frases, String URL_grupos, String URL_pictos, String edad, String pago) {
Nombre = nombre;
Dispositivo = dispositivo;
this.sexo = sexo;
this.lenguaje = lenguaje;
this.email = email;
....
}
public String getNombre() {
return Nombre;
}
public void setNombre(String nombre) {
Nombre = nombre;
}
public String getDispositivo() {
return Dispositivo;
}
....
请记住,这里变量nombre,email等都需要与Firebase数据库完全一致,否则你会看到空白并且结果不会显示,并记住在onStart
中放置mAdapter.startListening();
。
答案 2 :(得分:0)
在PostViewHolder中添加一个函数说
public void init(int position){
itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View view) {
//Handle your click here
}
});
}
现在从populateViewHolder调用
viewHolder.init(position);
答案 3 :(得分:0)
在函数外部创建ImageView对象,就像对mView一样。 然后在populateViewHolder中添加
viewHolder.imageView.setOnClickListener()
它可以很好地保证