Android Fragments 如何在回收程序视图中获取项目的上下文

qyyhg6bp  于 2022-11-24  发布在  Android
关注(0)|答案(1)|浏览(183)

我正在检索(Modelo)中的Cloud Firestore数据,并尝试使用适配器(Adapter)将这些变量从构造函数“Modelo”传递到fragment(DescDenuncia),但为此,我需要使用.getSupportFragmentManager()获取要传递的上下文。我已经尝试使用“AppCompatActivity activity =(AppCompatActivity)view.getContext();“,但我的应用程序每次都崩溃,而且必须使用getSupportFragmentManager()中的Context才能使其工作。我真的不知道我应该怎么做,请有人回答我。
莫德洛

package com.example.safe;

public class Modelo {

    String empresa, area, setor, tipo, risco, img, data, prazo, desc, resolucao, ID;

    public Modelo() {
    }

    public Modelo(String empresa, String area, String setor, String tipo, String risco, String img, String data, String prazo, String desc, String resolucao, String ID) {
        this.empresa = empresa;
        this.area = area;
        this.setor = setor;
        this.tipo = tipo;
        this.risco = risco;
        this.img = img;
        this.data = data;
        this.prazo = prazo;
        this.desc = desc;
        this.resolucao = resolucao;
        this.ID = ID;
    }

    public String getEmpresa() {
        return empresa;
    }

    public void setEmpresa(String empresa) {
        this.empresa = empresa;
    }

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    public String getSetor() {
        return setor;
    }

    public void setSetor(String setor) {
        this.setor = setor;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getRisco() {
        return risco;
    }

    public void setRisco(String risco) {
        this.risco = risco;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getPrazo() {
        return prazo;
    }

    public void setPrazo(String prazo) {
        this.prazo = prazo;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getResolucao() {
        return resolucao;
    }

    public void setResolucao(String resolucao) {
        this.resolucao = resolucao;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }
}

转接器

package com.example.safe;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;

//Vinculando o reclycler view ao firestore
public class Adapter extends FirestoreRecyclerAdapter<Modelo, Adapter.myviewholder> {

    public Adapter(@NonNull FirestoreRecyclerOptions<Modelo> options) {
        super(options);
    }

    //Sobrescrevendo o método
    @Override
    protected void onBindViewHolder(@NonNull myviewholder holder, int position, @NonNull final Modelo model) {
        //Associando os itens do atalho ocorrências
        holder.IDText.setText(model.getID());
        holder.tipoText.setText(model.getTipo());
        Glide.with(holder.img1.getContext()).load(model.getImg()).into(holder.img1);

        ///////////////////////////////////////THE PROBLEM IS HERE///////////////////////////////////////////
        holder.RLAYOUT.setOnClickListener(new View. OnClickListener() {
            @Override
            public void onClick(View view) {
                .getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout, new DescDenuncia(
                        model.getEmpresa(),
                        model.getArea(),
                        model.getSetor(),
                        model.getTipo(),
                        model.getRisco(),
                        model.getImg(),
                        model.getData(),
                        model.getPrazo(),
                        model.getDesc(),
                        model.getResolucao(),
                        model.getID()
                )).addToBackStack(null).commit();
            }


        });
        //////////////////////////////////////////////////////////////////////////////////////////////////////
    }

    @NonNull
    @Override
    public myviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.modelo_atalho_ocorrencias, parent, false);
        return new myviewholder(view);

    }

    //Coneção do reclycler view com essa classe
    public class myviewholder extends RecyclerView.ViewHolder {

        //Variáveis do modelo atalho
        TextView tipoText, IDText;
        RelativeLayout RLAYOUT;
        ImageView img1;
        private Context context;


        //Associando os objetos ao modelo atalho
        public myviewholder(@NonNull View itemView) {
            super(itemView);

            tipoText = itemView.findViewById(R.id.txtTipo);
            img1 = itemView.findViewById(R.id.imageView);
            IDText = itemView.findViewById(R.id.txtModeloID);
            RLAYOUT = itemView.findViewById(R.id.RLlayout);
        }
    }

}
mjqavswn

mjqavswn1#

myviewholder构造函数中添加Context参数,该构造函数将接受附加的context参数

public class myviewholder extends RecyclerView.ViewHolder {

    private Context context;

    ...
    ...

    public myviewholder(@NonNull View itemView, Context context) {
        super(itemView);
        this.context = context
}

onCreateViewHolder中只需调用parent.getContext()并将其传递给视图保持器的构造。

public myviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.modelo_atalho_ocorrencias, parent, false);
        return new myviewholder(view, parent.getContext()); //  add <- this

另外,请练习使用Uppercase缩写命名类

相关问题