簡體   English   中英

來自 ViewAdapter 的無條件布局膨脹:應該使用 ViewHolder...?

[英]Unconditional layout inflation from ViewAdapter: Should Use ViewHolder...?

我有一個列表視圖,顯示對象的 ArrayList(類“Doenca”),這個警告出現在我的充氣器中,我在類中使用 ListView 適配器。 看:

public class DoencaAdapter extends ArrayAdapter<Doenca> {
    private final Context context;
    private final ArrayList<Doenca> doencaArrayList;

    public DoencaAdapter(Context context, ArrayList<Doenca> doencaArrayList) {
        super(context, R.layout.linhas_dados_patologia_grupo, doencaArrayList);
        this.context = context;
        this.doencaArrayList = doencaArrayList;
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View root = inflater.inflate(R.layout.linhas_dados_patologia_grupo, parent, false);

        // Indicando quem é quem no layout XML
        TextView nomeDoenca = root.findViewById(R.id.doencaNome);
        TextView causaDoenca = root.findViewById(R.id.doencaCausa);
        TextView efeitoDoenca = root.findViewById(R.id.doencaEfeito);
        TextView cuidadoDoenca = root.findViewById(R.id.doencaCuidados);
        TextView prevencaoDoenca = root.findViewById(R.id.doencaPrevencao);
        TextView categoriaDoenca = root.findViewById(R.id.doencaCategoria);
        TextView criadorDoenca = root.findViewById(R.id.doencaCriador);
        ImageView doencaFoto = root.findViewById(R.id.doencaFoto);


        // Atribuindo valores a cada doença adicionada pelo usuário
        nomeDoenca.setText(doencaArrayList.get(position).getNome());
        causaDoenca.setText(doencaArrayList.get(position).getCausa());

        efeitoDoenca.setText(doencaArrayList.get(position).getEfeito());



        cuidadoDoenca.setText(doencaArrayList.get(position).getCuidados());
        prevencaoDoenca.setText(doencaArrayList.get(position).getPrevencao());
        categoriaDoenca.setText(doencaArrayList.get(position).getCategoria());

        criadorDoenca.setText(FirebaseAuth.getInstance().getCurrentUser().getDisplayName());

        switch (doencaArrayList.get(position).getCategoria().toString()){
            case "Inflamação":
                doencaFoto.setImageResource(R.mipmap.ic_doenca1);
            // listView.setDivider(new ColorDrawable(context.getResources().getColor(R.color.preto1)));
                break;
            case "Infecção":
                doencaFoto.setImageResource(R.mipmap.ic_doenca2);
            //    listView.setDivider(new ColorDrawable(context.getResources().getColor(R.color.amarelo2)));
                break;
            case "Zoonose":
                doencaFoto.setImageResource(R.mipmap.ic_doenca3);
           //     listView.setDivider(new ColorDrawable(context.getResources().getColor(R.color.vermelho3)));
                break;
            case "Viral":
                doencaFoto.setImageResource(R.mipmap.ic_doenca4);
            //   listView.setDivider(new ColorDrawable(context.getResources().getColor(R.color.azul4)));
                break;
            case "Outros":
                doencaFoto.setImageResource(R.mipmap.ic_doenca5);
                break;
            default:
                doencaFoto.setImageResource(R.mipmap.ic_doenca5);
            //   listView.setDivider(new ColorDrawable(context.getResources().getColor(R.color.laranja5)));
                break;
        }
        return  root;
    }
}

我看不到任何錯誤會導致此警告。 但是,我的列表視圖的項目顯示正常,只有一項沒有顯示,但它必須是數據庫推送數據。

這是您想要初始化視圖的方式,因為convertView可以在視圖回收時重新使用。

public class DoencaAdapter extends ArrayAdapter<Doenca> {
    private final Context context;
    private final ArrayList<Doenca> doencaArrayList;

    public DoencaAdapter(Context context, ArrayList<Doenca> doencaArrayList) {
        super(context, R.layout.linhas_dados_patologia_grupo, doencaArrayList);
        this.context = context;
        this.doencaArrayList = doencaArrayList;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View view;
        if (convertView != null) {
            view = convertView;
        } else {
            view = LayoutInflater.from(context).inflate(R.layout.linhas_dados_patologia_grupo, parent, false);
        }
        ...
        return view;
    }

}

此外,您可能需要考慮使用 RecyclerView。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM