如何在firebaseRecyclerView中单击ImageView?

时间:2018-06-01 13:53:11

标签: android firebase firebase-realtime-database android-recyclerview

我可以从我的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);
    }
}

`

4 个答案:

答案 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() 

它可以很好地保证