开发者社区 问答 正文

ViewAdapter的无条件布局膨胀:是否应该使用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;
    }
}

我看不到任何错误会导致此警告。但是,我的列表视图中的各项正常显示,只有一项没有显示,但必须是数据库推送数据。

展开
收起
Puppet 2020-01-18 22:23:44 419 分享 版权
1 条回答
写回答
取消 提交回答
  • 这是您要初始化视图的方式,因为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。

    2020-01-18 22:24:02
    赞同 展开评论
问答分类:
问答地址: